查找全局模式匹配

use*_*629 4 java regex

我有这样的模式:

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)

Mak*_*oto 6

这是更换的情况下ifwhile。只要不重置匹配器,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)