Java 如何匹配任何符号,包括线终止符?

Java 如何匹配任何符号,包括线终止符?,java,regex,Java,Regex,我有一个文本“文本abc”。当我使用“(++)abc”模式时,我发现一个匹配的“文本”,这是可以的。但是,如果我使用第二个模式,“([.]{1,})abc”,matcher找不到任何匹配项。为什么? 我希望使用大括号[],因为我还希望使用折线符号(例如,现在我无法将“text\n abc”与第一个图案匹配) 对不起,我英语不好 另请参见DOTALL模式: 我的代码: String text = "text abc"; Pattern pattern = Pattern.compi

我有一个文本“文本abc”。当我使用“(++)abc”模式时,我发现一个匹配的“文本”,这是可以的。但是,如果我使用第二个模式,“([.]{1,})abc”,matcher找不到任何匹配项。为什么?

我希望使用大括号[],因为我还希望使用折线符号(例如,现在我无法将“text\n abc”与第一个图案匹配)

对不起,我英语不好

另请参见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教程中所述:

注意:在某些情况下,上面列出的特殊字符不会被视为元字符

[.]
的情况下,
不再是regex元字符。您可以通过对字符串
“test.abc”
测试模式来验证这一点,该字符串将
分组

要启用
DOTALL
标志,只需将参数添加到正则表达式中,或者您可以将该选项添加为参数:

Pattern pattern = Pattern.compile("(?s)(.+) abc")


Pattern pattern = Pattern.compile("(.+) abc", Pattern.DOTALL)