【问题标题】:What is the {L} Unicode category?{L} Unicode 类别是什么?
【发布时间】:2011-08-23 14:09:12
【问题描述】:

我遇到了一些包含[^\\p{L}] 的正则表达式。我知道这是使用某种形式的 Unicode 类别,但是当我检查 the documentation 时,我发现只有以下“L”类别:

Lu  Uppercase letter    UPPERCASE_LETTER
Ll  Lowercase letter    LOWERCASE_LETTER
Lt  Titlecase letter    TITLECASE_LETTER
Lm  Modifier letter     MODIFIER_LETTER
Lo  Other letter        OTHER_LETTER

在这种情况下L 是什么?

【问题讨论】:

    标签: java regex unicode character-properties


    【解决方案1】:

    取自此链接:http://www.regular-expressions.info/unicode.html

    查看Unicode Character Properties 部分。

    \p{L} 匹配单个代码点 “信”类。如果您的输入 字符串 à 编码为 U+0061 U+0300, 它匹配没有重音的 a。如果 输入被à编码为U+00E0,它 将 à 与重音匹配。原因 是两个代码点 U+0061 (a) 和 U+00E0 (à) 属于该类别 “字母”,而 U+0300 在 类别“标记”。

    【讨论】:

    【解决方案2】:

    我没有看到任何明确提及它,但this page 上的示例表明\\p{L} 表示任何字母:

    可以使用可选前缀 Is 指定类别:\p{L} 和 \p{IsL} 都表示 Unicode 字母的类别。

    【讨论】:

    • 我也是这么想的,但是为什么下面的正则表达式(用空格)替换 everything 那是 not 一个字母? String.replaceAll("[^\\p{L}]", " ")
    • @uTubeFan:看到你在^\\p{L}中使用negation。因此,当我执行类似"Test akd ^^%!~+_)".replaceAll("[^\\p{L}]", " ") 的操作时,它将输出Test akd 。相反,如果你这样做"Test akd ^^%!~+_)".replaceAll("[\\p{L}]", " ");,那么输出将是`^^%!~+_)`
    • @Favonius 谢谢!那么,我可以由此得出结论 ^%!~+_被视为字母吗? (我基本上希望用空格替换所有非字母(撇号'wasn't 除外),有什么建议吗?)
    • @uTubeFan:刚刚看到你之前的评论。无论如何,你为我保存了工作:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-18
    • 2011-01-23
    • 1970-01-01
    • 2013-05-04
    • 2010-11-01
    • 2015-03-06
    • 2015-03-30
    相关资源
    最近更新 更多