Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.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正则表达式匹配由4个空格括起的单词_Java_Regex - Fatal编程技术网

java正则表达式匹配由4个空格括起的单词

java正则表达式匹配由4个空格括起的单词,java,regex,Java,Regex,我有一个文本,其中包含的单词在开头用两个空格括起来,在结尾用另外两个空格括起来,如下所示: “我的文本是分开的,就像这个例子” 所以我想检索“separated”和“example” 我是这样实施的: String pattern = "\\s{2}(\\w+)\\s{2}"; String t = getText(); Pattern p = Pattern.compile(pattern); Matcher m = p.matcher(t); Str

我有一个文本,其中包含的单词在开头用两个空格括起来,在结尾用另外两个空格括起来,如下所示:

“我的文本是分开的,就像这个例子”

所以我想检索“separated”和“example”

我是这样实施的:

    String pattern = "\\s{2}(\\w+)\\s{2}";

    String t = getText();
    Pattern p = Pattern.compile(pattern);
    Matcher m = p.matcher(t);
    StringBuilder b = new StringBuilder();
    while (m.find()) {
        b.append(m.group(1) + "xxx\n");
    }
    Log.d("hmmmmm", b.toString());
但它不起作用(m.find()为false)


编辑:以下是我的文字:

‏‏حَدَّثَنَا ‏ ‏الْحُمَيْدِيُّ عَبْدُ اللَّهِ بْنُ الزُّبَيْرِ ‏ ‏قَالَ حَدَّثَنَا ‏ ‏سُفْيَانُ ‏ ‏قَالَ حَدَّثَنَا ‏ ‏يَحْيَى بْنُ سَعِيدٍ الْأَنْصَارِيُّ ‏ ‏قَالَ أَخْبَرَنِي ‏ ‏مُحَمَّدُ بْنُ إِبْرَاهِيمَ التَّيْمِيُّ ‏ ‏أَنَّهُ سَمِعَ ‏ ‏عَلْقَمَةَ بْنَ وَقَّاصٍ اللَّيْثِيَّ ‏ ‏يَقُولُ سَمِعْتُ ‏ ‏عُمَرَ بْنَ الْخَطَّابِ ‏ ‏رَضِيَ اللَّهُ عَنْهُ ‏ ‏عَلَى الْمِنْبَرِ ‏ ‏قَالَ سَمِعْتُ رَسُولَ اللَّهِ ‏ ‏صَلَّى اللَّهُ عَلَيْهِ وَسَلَّمَ ‏ ‏يَقُولُ ‏ ‏إِنَّمَا الْأَعْمَالُ ‏ ‏بِالنِّيَّاتِ ‏ ‏وَإِنَّمَا لِكُلِّ امْرِئٍ مَا نَوَى فَمَنْ كَانَتْ هِجْرَتُهُ إِلَى دُنْيَا ‏ ‏يُصِيبُهَا ‏ ‏أَوْ إِلَى امْرَأَةٍ يَنْكِحُهَا فَهِجْرَتُهُ إِلَى مَا هَاجَرَ إِلَيْهِ‏.

“سَُْانُ”和‏ب㶕ننَّّّاتِ”例如,应在输出中


注意:在示例中,我将空格替换为(u),使其更加可见

注意:我的文本是阿拉伯语

编辑:原来它没有用双空格分隔,请参见下面的答案。

Java将“单词字符”
\w
定义为
[a-zA-Z_0-9]
,因此阿拉伯语文本不匹配(旁注:欧洲口音也不匹配,例如“èè”)

根据需要,您可以使用阿拉伯语的
[\u0600-\u06FF]
,而不是
\w

根据需要,您可以使用
\p{InArabic}
,这似乎更好

此外,您的文本片段不包含2个连续的空白字符,因此
\s{2}
不会获得任何匹配。看起来看起来像“双空格”的实际上是紧跟着unicode的空格,unicode是十六进制的
200F
。因此可以与
\\s\\x{200f}(\\p{InArabic}+\\s\\x{200f}
匹配。 例如:

其中
getText()
返回您的文本片段,这将打印:

[true, false, false, true]
سُفْيَانُ
يَقُولُ
بِالنِّيَّاتِ
يُصِيبُهَا
现在,我不确定期望您的文本在特定单词周围包含这样的标记,并明确匹配这样的标记是否是一件好事:-/

我也不知道regexr.com是如何工作的,因为我认为JavaScript的
\w
与Java的意思相同(而且我看不到网络往返,所以它必须用JS实现,不过可能需要一些转换层)。甚至他们自己的嵌入式文档也这样说
\w

匹配任何单词字符(字母数字和下划线)。仅匹配低ascii字符(无重音字符或非罗马字符)。相当于[A-Za-z0-9_33;


也许您可以给出一个可用于测试的实际示例字符串。@OH GOD SPIDERS,我更新了该问题。还用阿拉伯文本显示了预期的输出?我更新了该问题(很抱歉,我的连接出现问题),因此我执行了以下操作:字符串模式=“\\s{2}([\\u0600-\\u06FF]+)\\s{2}”;它也不起作用,而且,regexr.com甚至不接受我的阿拉伯语文本,但它与英语文本配合得很好。请看我的编辑,对于unicode字符类,在
u
之前需要一个反斜杠,所以
\u
它不起作用,是不是因为几乎每个单词都以变音字母开头/结尾?有趣的是,我也看到了。您的文本不包含两个后续空格,中间还有其他不可见字符。看,在我手动添加更多空格的地方,它只有1个匹配项。点击“编辑”,在空格处看到奇怪的点。如果我将您的文本保存到文件中,则
grep-E“\s\s”
找不到匹配项。这些可能就是你所说的变音组合字符。不知道,抱歉。@mh6请检查“新建编辑”,了解两个新内容:a)使用
\p{InArabic}
----b)有一种更好的方法,也许您想要的是
\\b\\s(\\p{InArabic}+\\s\\b
,请参阅更新的示例。
[true, false, false, true]
سُفْيَانُ
يَقُولُ
بِالنِّيَّاتِ
يُصِيبُهَا