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

时间:2018-05-05 17:43:08

标签: java regex

我有一个文字"文字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"图案。

2 个答案:

答案 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)

Note reference

Full list of flags and other useful information