【问题标题】:What does regex pattern "[\\P{L}]+" mean in Java? [duplicate]正则表达式模式“[\\P{L}]+”在 Java 中是什么意思? [复制]
【发布时间】:2016-07-18 16:06:14
【问题描述】:

代码:

Arrays.asList("AAAA DDDD, DDDD".split("[\\P{L}]+")).forEach(System.out::println);

输出:

AAAA
DDDD
DDDD

请注意它是P{L} 而不是p{L}(表示字母)。我用谷歌搜索但什么也没找到。那么有人可以给我一些提示吗?

【问题讨论】:

  • 请参阅 this question 以获得详细描述该主题的网站的链接。

标签: java regex


【解决方案1】:

可以在PatternJavadoc中找到解释:

Unicode 脚本、块、类别和二进制属性使用 \p\P 结构编写,就像在 Perl 中一样。 \p{prop} 如果输入有属性 prop 则匹配,而\P{prop} 不匹配如果输入有该属性。

所以它与\p相反。

【讨论】:

    【解决方案2】:

    简单:与\\p{L} 正好相反。

    基本上都是“非字母”。

    我在API 中找不到确切参考,但您可以从行为中推断出建议,或者说,\\s vs \\S 记录在那里)。

    编辑(感谢Tunaki的眼睛)

    这实际上是由文档中的以下语句建议的:

    Unicode 块和类别是用 \p 和 \P 编写的 像在 Perl 中一样构造。

    【讨论】:

    • 有相关的文档或参考资料吗?
    • @Sayakiss 实际上,这在整个互联网上都有很多。 regular-expressions.info/unicode.html您可以将属于“字母”类别的单个字符与\p{L} 匹配。您可以将不属于该类别的单个字符与\P{L} 匹配。
    猜你喜欢
    • 2015-07-21
    • 2015-07-23
    • 1970-01-01
    • 2014-12-06
    • 2014-11-16
    • 2011-12-20
    • 1970-01-01
    • 1970-01-01
    • 2014-09-02
    相关资源
    最近更新 更多