Ely*_*deh 12 java regex arabic persian
在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
nha*_*tdh 18
您可以使用以下正则表达式:
"[\\p{InArabic}&&\\PN]"
Run Code Online (Sandbox Code Playgroud)
\p{InArabic}
匹配Unicode Block Arabic中的任何字符(从U + 0600到U + 06FF)
\PN
匹配任何不属于任何数字类别的字符(注意大写P
).
相交2组可得到所需的结果:不包括数字范围(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]"));
}
Run Code Online (Sandbox Code Playgroud)
您可以使用字符类减法,这是一个相当模糊的功能:
[\p{InArabic}&&[^?-?]]
Run Code Online (Sandbox Code Playgroud)
工作示例:http://ideone.com/jChGem