看着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字符匹配。这意味着它将匹配a
和1
,但不匹配ä
或١
。
您引用的段落仅在使用UNICODE_CHARACTER_CLASS
标志时适用。
略微简化,此标志会将“旧的” POSIX样式字符类转换为等效的Unicode字符类。
关于java - Java RegEx模式中Alnum和IsAlphabetic字符类之间的关系,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55742036/