波斯语(阿拉伯语)字母的正则表达式,没有任何数字

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)


Kob*_*obi 6

您可以使用字符类减法,这是一个相当模糊的功能:

[\p{InArabic}&&[^?-?]]
Run Code Online (Sandbox Code Playgroud)

工作示例:http://ideone.com/jChGem