在Java中,我正在寻找一个接受任何波斯语(或阿拉伯语)字母的正则表达式,除了任何波斯语(或阿拉伯语)数字。 为了只有字母,我找到了一个非常好的正则表达式:
[\u0600-\u065F\u066A-\u06EF\u06FA-\u06FF]
虽然这是真的并且对我有用,但我们知道我们可以使用\\p{L}+
作为正则表达式,它接受来自世界上所有语言的所有字母,在我的情况下(阿拉伯语 - 波斯语)我可以修改它并使用[\\p{InArabic}]+$.
但是使用[\\p{InArabic}]+$
不仅可以接受所有阿拉伯语(波斯语)字母,而且阿拉伯数字也可以接受,例如1 2。
所以我的问题是如何修改[\\p{InArabic}]+$
只是接受字母而不是数字,换句话说我如何限制[\\p{InArabic}]+$
不接受任何数字?
请注意,波斯语(阿拉伯语)的数字如下:1 2 3 4 5 6 7 8 9 0
答案 0 :(得分:18)
您可以使用以下正则表达式:
"[\\p{InArabic}&&\\PN]"
\p{InArabic}
匹配Unicode Block Arabic中的任何字符(从U + 0600到U + 06FF)
\PN
匹配任何属于任何数字类别的非字符(请注意首都P
)。
将两组相交得到所需的结果:不包括两个数字范围(U + 0660到U + 0669)和(U + 06F0到U + 06F9)。
for (int i = 0x600; i <= 0x6ff; i++) {
String c = "" + (char) i;
System.out.println(Integer.toString(i, 16) + " " + c.matches("[\\p{InArabic}&&\\PN]"));
}
答案 1 :(得分:6)