Java 正则表达式不';不能匹配多个字符串

Java 正则表达式不';不能匹配多个字符串,java,regex,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()

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

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);
    }
如果字符串只有一个匹配项,则此操作有效,但如果其连续匹配项不起作用。我尝试在正则表达式的末尾添加.+以确保它至少有一个匹配项。那也不行


我做错了什么???

您需要设置多行标志:

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

这将允许
$
^
匹配输入中的回车
\r

您需要设置多行标志:

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

这将允许
$
^
匹配输入中的回车
\r

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

如果希望正则表达式只匹配正则表达式标志中的行。
同时删除
[\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);
}

默认情况下,
^
$
表示整个输入的开始/结束(传递给Matcher),而不是行的开始/结束

如果希望正则表达式只匹配正则表达式标志中的行。
同时删除
[\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);
}

删除行开始
^
和行结束
$
,您的代码将正常工作:

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);
    }

删除行开始
^
和行结束
$
,您的代码将正常工作:

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);
    }