没有任何数字的波斯语(阿拉伯语)字母的正则表达式
Regular expression for persian(arabic) letters without any numbers
在 Java 中,我正在寻找一个正则表达式,它接受除任何波斯(或阿拉伯)数字之外的任何波斯(或阿拉伯)字母。
为了只有字母,我找到了一个非常好的正则表达式:
[\u0600-\u065F\u066A-\u06EF\u06FA-\u06FF]
虽然这是真的并且对我有用,但我们知道我们可以使用 \p{L}+
作为正则表达式,它接受来自世界上所有语言的所有字母,在我的例子中(阿拉伯语 - 波斯语) 我可以修改它并使用 [\p{InArabic}]+$.
但是通过使用 [\p{InArabic}]+$
,不仅所有阿拉伯(波斯)字母都将被接受,而且阿拉伯数字也将被接受,例如 12。
所以我的问题是如何修改 [\p{InArabic}]+$
以仅接受字母而不是数字,或者换句话说如何限制 [\p{InArabic}]+$
不接受任何数字?
请注意波斯语(阿拉伯语)数字是这样的:1234567890
您可以使用 character class subtraction,这是一个相当晦涩的功能:
[\p{InArabic}&&[^۰-۹]]
您可以使用以下正则表达式:
"[\p{InArabic}&&\PN]"
\p{InArabic}
匹配 Unicode Block Arabic 中的任何字符(从 U+0600 到 U+06FF)
\PN
匹配任何 not 属于任何数字类别的字符(注意大写 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]"));
}
在 Java 中,我正在寻找一个正则表达式,它接受除任何波斯(或阿拉伯)数字之外的任何波斯(或阿拉伯)字母。 为了只有字母,我找到了一个非常好的正则表达式:
[\u0600-\u065F\u066A-\u06EF\u06FA-\u06FF]
虽然这是真的并且对我有用,但我们知道我们可以使用 \p{L}+
作为正则表达式,它接受来自世界上所有语言的所有字母,在我的例子中(阿拉伯语 - 波斯语) 我可以修改它并使用 [\p{InArabic}]+$.
但是通过使用 [\p{InArabic}]+$
,不仅所有阿拉伯(波斯)字母都将被接受,而且阿拉伯数字也将被接受,例如 12。
所以我的问题是如何修改 [\p{InArabic}]+$
以仅接受字母而不是数字,或者换句话说如何限制 [\p{InArabic}]+$
不接受任何数字?
请注意波斯语(阿拉伯语)数字是这样的:1234567890
您可以使用 character class subtraction,这是一个相当晦涩的功能:
[\p{InArabic}&&[^۰-۹]]
您可以使用以下正则表达式:
"[\p{InArabic}&&\PN]"
\p{InArabic}
匹配 Unicode Block Arabic 中的任何字符(从 U+0600 到 U+06FF)
\PN
匹配任何 not 属于任何数字类别的字符(注意大写 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]"));
}