为什么正则表达式\ pL + \ pM +不适用于英语?

时间:2013-05-03 06:28:04

标签: java regex unicode utf-8

为什么正则表达式\pL+\pM+不适用于英语?

为什么下面的第一个例子结果为假,其中第二个结果为真?

System.out.println(Charset.forName("UTF-8").encode("suren") 
                .asCharBuffer().toString().matches("\\PL+\\PM+"));

System.out.println(Charset.forName("UTF-8").encode("स्वागत") 
                .asCharBuffer().toString().matches("\\PL+\\PM+"));

基本上我需要一个正则表达式来在字符串中仅限制unicode字符(世界上任何语言)

1 个答案:

答案 0 :(得分:1)

你想要

"^[\\p{Letter&}\\p{Mark}]+$"

你的正则表达式需要一个标记(\PM+),而你只想允许它。还要注意锚点。

总的来说:我建议使用长字形的Unicode字符属性。它使表达更具可读性。