正则表达式不匹配多个字符串

时间:2016-04-08 19:00:48

标签: java regex

我正在尝试在我的正则表达式中找到多个匹配项。这是我的正则表达式

final Pattern p = Pattern.compile("^[0-9]{8}[#](FRI|SAT|SUN)[\r]$");
final Matcher m = p.matcher("09042012#SUN\r" + "09022012#FRI\r" + "09032012#SAT\r");
    while (m.find())
    {
        final String result = m.group();
        System.out.println(result);
    }

如果字符串只有一个匹配,则可以正常工作,但如果连续匹配则不起作用。我已经尝试在我的正则表达式的末尾添加。+以确保它至少有一个匹配。这也不起作用。

我做错了什么?

3 个答案:

答案 0 :(得分:2)

您需要设置多行标记:

final Pattern p = Pattern.compile("^[0-9]{8}[#](FRI|SAT|SUN)$", Pattern.MULTILINE);

这样,$^就可以在输入中的回车\r上匹配。

答案 1 :(得分:0)

^$默认表示整个输入的开始/结束(传递给匹配器),而不是行的开始/结束。

如果您希望正则表达式仅匹配正则表达式Pattern.MULTILINE标记中使用的行 同时删除[\r],因为它后面的字符被视为放在下一行,这意味着$之后放置的[\r]只能匹配下一行的结尾 - 换句话说,您会发现只匹配下一行是空的。

所以你的代码应该更像

final Pattern p = Pattern.compile("^[0-9]{8}[#](FRI|SAT|SUN)$", Pattern.MULTILINE);
//                                                              ^^^^^^^^^^^^^^^^^
final Matcher m = p.matcher(
          "09042012#SUN\r" 
        + "09022012#FRI\r" 
        + "09032012#SAT\r");
while (m.find())
{
    final String result = m.group();
    System.out.println(result);
}

答案 2 :(得分:0)

删除行开始objdump -d和行结束^,您的代码将起作用:

$