Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不带任何数字的波斯语(阿拉伯语)字母的正则表达式_Java_Regex_Arabic_Persian - Fatal编程技术网

Java 不带任何数字的波斯语(阿拉伯语)字母的正则表达式

Java 不带任何数字的波斯语(阿拉伯语)字母的正则表达式,java,regex,arabic,persian,Java,Regex,Arabic,Persian,在Java中,我正在寻找一个正则表达式,它接受除任何波斯语(或阿拉伯语)数字之外的任何波斯语(或阿拉伯语)字母。 为了只包含字母,我发现了一个非常好的正则表达式: [\u0600-\u065F\u066A-\u06EF\u06FA-\u06FF] 虽然这是真的并且对我有效,但是我们知道我们可以使用\\p{L}+作为一个正则表达式,它接受来自世界上所有语言的所有字母,在我的例子中(阿拉伯语-波斯语),我可以修改它并使用[\\p{InArabic}+$。 但是通过使用[\\p{InArabic}]+

在Java中,我正在寻找一个正则表达式,它接受除任何波斯语(或阿拉伯语)数字之外的任何波斯语(或阿拉伯语)字母。 为了只包含字母,我发现了一个非常好的正则表达式:

[\u0600-\u065F\u066A-\u06EF\u06FA-\u06FF]

虽然这是真的并且对我有效,但是我们知道我们可以使用
\\p{L}+
作为一个正则表达式,它接受来自世界上所有语言的所有字母,在我的例子中(阿拉伯语-波斯语),我可以修改它并使用
[\\p{InArabic}+$。

但是通过使用
[\\p{InArabic}]+$
不仅可以接受所有的阿拉伯语(波斯语)字母,还可以接受阿拉伯数字,如۱۲

所以我的问题是如何修改
[\\p{InArabic}]+$
只接受字母而不是数字,或者换句话说,如何限制
[\\p{InArabic}]+$
不接受任何数字

请注意,波斯语(阿拉伯语)数字如下:۱۲۳۴۵۷۸۹۰

,这是一个相当模糊的特征:

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

工作示例:

您可以使用以下正则表达式:

"[\\p{InArabic}&&\\PN]"
\p{InArabic}
匹配Unicode块阿拉伯语中的任何字符(从U+0600到U+06FF)

\PN
匹配不属于任何数字类别的任何字符(注意大写字母
p

将两个集合相交可得到所需的结果:排除两个数字范围(U+0660至U+0669)和(U+06F0至U+06F9)

测试代码
for(int i=0x600;i Hey buddy,谢谢你,不幸的是你的正则表达式在.Net技术中是可以接受的,我正在寻找一种Java编程语言。不幸的是,你编辑的答案不起作用,你知道吗?我想Java不支持[^۰-۹],我不知道:-??@ElyasHadizadeh-怪异…似乎对我有用:。你能在问题中发布你的代码吗?你还需要排除范围
[٠-٩]
,当前正则表达式仅排除从U+06F0到U的代码点+06F9@nhahtdh-这不正是我拥有的范围吗?我缺少什么?你确定应该是这样吗?
[\\p{InArabic}&&\\PN]
,因为我的IDE在\\PN后面显示了一条红线:(上面写着:应该是字符类别。@ElyasHadizadeh:在发布之前,我已经在我的机器(Java 7和Java 8)上测试了正则表达式。请注意,我在字符串文本中指定了正则表达式。如果需要原始表单,请删除一个。是的,你是对的,它可以作为一个符咒,但是我的IDE在\\PN后面画了一条红线,这很奇怪。(我使用IntelliJ IDEA 13.0.4,Java 7和Java 8,在这两种情况下,\\PN后面都显示红线,但当我编译和运行应用程序时,它工作正常。谢谢你的回答,你的IDE是什么?你知道我为什么会出现这样的错误吗?@ElyasHadizadeh:我使用Eclipse,但Eclipse没有对regex进行任何有效性检测。最重要的是检查字符串文字的语法。
for (int i = 0x600; i <= 0x6ff; i++) {
    String c = "" + (char) i;
    System.out.println(Integer.toString(i, 16) + " " + c.matches("[\\p{InArabic}&&\\PN]"));
}