我有这样的模式:
String pattern = "(media:\\s\\d+)"
Run Code Online (Sandbox Code Playgroud)
我想匹配一个子字符串变体
"media:" + space/no space + X
Run Code Online (Sandbox Code Playgroud)
...其中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());
}
Run Code Online (Sandbox Code Playgroud)
这是更换的情况下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());
}
Run Code Online (Sandbox Code Playgroud)