java正则表达式匹配由4个空格括起的单词
我有一个文本,其中包含的单词在开头用两个空格括起来,在结尾用另外两个空格括起来,如下所示: “我的文本是分开的,就像这个例子” 所以我想检索“separated”和“example” 我是这样实施的: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
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]
سُفْيَانُ
يَقُولُ
بِالنِّيَّاتِ
يُصِيبُهَا