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

时间:2015-05-08 04:51:02

标签: 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

2 个答案:

答案 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)

您可以使用character class subtraction,这是一个相当模糊的功能:

[\p{InArabic}&&[^۰-۹]]

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