我正在尝试在我的正则表达式中找到多个匹配项。这是我的正则表达式
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);
}
如果字符串只有一个匹配,则可以正常工作,但如果连续匹配则不起作用。我已经尝试在我的正则表达式的末尾添加。+以确保它至少有一个匹配。这也不起作用。
我做错了什么?
答案 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
和行结束^
,您的代码将起作用:
$