看着Javadoc for java.util.regex.Pattern


  \p{Alnum}字母数字字符:[\p{IsAlphabetic}\p{IsDigit}]


似乎每个与\p{IsAlphabetic}匹配的字符也应与\p{Alnum}匹配

但是,当角色带有重音时似乎并非如此。例如,以下断言失败:

assertEquals("é".matches("\\p{IsAlphabetic}+"),"é".matches("\\p{Alnum}+"));


对于带有重音符号的其他字符,例如ąółź ż,也会发生相同的情况。全部匹配\p{IsAlphabetic}+,但不匹配\p{Alnum}+

我会误解Javadoc吗?还是这是文档或实施中的错误?

最佳答案

默认情况下,\p{Alnum}被视为POSIX字符类,这意味着它将仅与ASCII字符匹配。这意味着它将匹配a1,但不匹配ä١

您引用的段落仅在使用UNICODE_CHARACTER_CLASS标志时适用。

略微简化,此标志会将“旧的” POSIX样式字符类转换为等效的Unicode字符类。

关于java - Java RegEx模式中Alnum和IsAlphabetic字符类之间的关系,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55742036/

10-11 22:13
查看更多