我有一个文字"文字abc"。当我使用"(。+)abc"模式,我找到了一个匹配"文本",没关系。但是如果我使用第二种模式,"([。] {1,})abc",匹配器没有找到任何匹配。为什么?
我想使用大括号[],因为我想使用一个断行符号(例如,现在我不能匹配" text \ n abc"第一个模式。
抱歉我的英文不好
另见DOTALL模式:https://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html#DOTALL
我的代码:
String text = "text abc";
Pattern pattern = Pattern.compile("(.+) abc");
Matcher m = pattern.matcher(text);
while (m.find()) {
System.out.println(m.group(1));
}
PS:我的目标是使用和#34;([。\ n] {1,})abc"图案。
答案 0 :(得分:1)
目前还不清楚你想要匹配什么,但如果我理解正确你的问题是" text \ n abc"。这是因为修补此问题的换行符使用了这个
Pattern pattern = Pattern.compile("(.+) abc", Pattern.DOTALL);
"。"的Pattern.DOTALL标志。甚至匹配\ r或\ n。
答案 1 :(得分:1)
目前,模式([.\n]{1,}) abc
相当倒退。首先,{1,}
与+
相同,因此这种模式确实是([.\n]+) abc
。其次,正如Oracle正则表达式教程中所述:
注意:在某些情况下,上面列出的特殊字符不会被视为元字符。
在[.]
的情况下,.
不再是正则表达式元字符。您可以通过针对字符串"test . abc"
测试模式来验证这一点,该字符串将"."
分组。
要启用DOTALL
标志,只需将参数添加到正则表达式,或者您可以将该选项添加为参数:
Pattern pattern = Pattern.compile("(?s)(.+) abc")
Pattern pattern = Pattern.compile("(.+) abc", Pattern.DOTALL)