[英]How to match any symbol including a line terminator?
我有一个文本“文本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:我的目标是使用“([..n] {1,})abc”模式。
目前尚不清楚您要匹配的内容,但是如果我正确理解您的问题是“ text \\ n abc”。 那是因为换行来解决这个问题
Pattern pattern = Pattern.compile("(.+) abc", Pattern.DOTALL);
“。”的Pattern.DOTALL标志。 甚至匹配\\ r或\\ n。
现在,模式([.\\n]{1,}) abc
相当倒退。 首先, {1,}
与+
相同,因此此模式实际上是([.\\n]+) abc
。 其次,如Oracle regex教程所述:
注意:在某些情况下,上面列出的特殊字符将不被视为元字符。
在这种情况下[.]
.
不再是正则表达式元字符。 您可以通过针对字符串"test . abc"
测试模式来验证这一点,该字符串将对"."
分组"."
。
要启用DOTALL
标志,只需将参数添加到正则表达式中,或者您可以将选项添加为参数:
Pattern pattern = Pattern.compile("(?s)(.+) abc")
Pattern pattern = Pattern.compile("(.+) abc", Pattern.DOTALL)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.