我有这样的模式:
String pattern = "(media:\\s\\d+)"
我想匹配
的子字符串变体"media:" + space/no space + X
...其中 X 是一组数字。该模式可以出现在文本中的任何位置,后跟任何内容。
以下是示例:
“影响力矩”文字:相机拍摄了致命的爆炸声 马拉松赛终点线附近的混乱。媒体:18962980 视频节目 跑步者......由于爆炸而下降媒体:18967421 旁观者 拍摄两个爆炸之间的人们的混乱。“
为此,我的模式仅返回第一个匹配而不是全部。 这是我正在使用的代码:
String pattern = "(media:\\s\\d+)";
Pattern media = Pattern.compile(pattern,Pattern.MULTILINE);
java.util.regex.Matcher m = media.matcher(text);
if(m.find()) {
logger.info("-- group:"+m.group());
}
答案 0 :(得分:4)
这是用if
替换while
的情况。只要匹配器没有重置,Matcher#find
将继续匹配令牌,直到排出字符串为止。
您还需要调整正则表达式,因为您可能匹配或不匹配空格。使用表达式\\s?
,它与单个空格匹配或不匹配。
作为一般提示,Pattern.MULTILINE
仅对锚点(^
和$
)有意义,而且由于您没有锚点,您可以安全地删除它。它没有造成任何损害,但它会主动降低你的代码的可读性。
String pattern = "media:\\s?\\d+";
Pattern media = Pattern.compile(pattern);
java.util.regex.Matcher m = media.matcher(text);
while(m.find()) {
logger.info("-- group:"+m.group());
}
答案 1 :(得分:0)
它没有重复或循环的原因是因为你没有使用while语句。要使其正常工作,请将if语句更改为while。
while(m.find()) {
logger.info("-- group:"+m.group());
}
对您的正则表达式模式使用此修改:
String pattern = "(media:\\s?\\d+)"
更改\\s?
的原因是即使没有空格也可以匹配模式。希望这有帮助!