在Java中,我正在寻找一个接受任何波斯(或阿拉伯语)数字以外的任何波斯(或阿拉伯语)字母的正则表达式。为了只有字母,我找到了一个很好的正则表达式:
[\u0600-\u065F\u066A-\u06EF\u06FA-\u06FF]
尽管它是正确的并且对我有用,但是我们知道我们可以将\\p{L}+
a作为正则表达式使用,它接受来自世界上所有语言的所有字母,在我的情况下(阿拉伯语-波斯语),我可以对其进行修改和使用[\\p{InArabic}]+$.
但是通过使用[\\p{InArabic}]+$
不仅所有阿拉伯(波斯)字母都将被接受,而且阿拉伯数字也可以接受,例如۱。
所以我的问题是我该如何修改[\\p{InArabic}]+$
以仅接受字母而不是数字,或者换句话说,如何限制[\\p{InArabic}]+$
不接受任何数字?
请注意,波斯(阿拉伯语)数字如下所示::۲ ۳ ۴ ۰ ۰ ۰
您可以使用以下正则表达式:
"[\\p{InArabic}&&\\PN]"
\p{InArabic}
匹配Unicode块阿拉伯语中的任何字符(从U + 0600到U + 06FF)
\PN
匹配不属于Number类别(请注意大写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]"));
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句