JAVA正则表达式匹配1个或多个匹配项

时间:2018-02-20 16:40:02

标签: java regex

我正在尝试获取特定子字符串的开始和结束索引。

输入字符串:somerandoMMMstring

我的最终目标是在此示例中获取MMM模式的开始和结束索引,但最终得到任意数量的连续M。

我的正则表达式是:.*(M+).*

出于某种原因,第1组正在生成字符串M

如何重构我的分组或正则表达式,以便能够获得整个MMM字符串。

3 个答案:

答案 0 :(得分:2)

只需使用* =>的非贪婪变体即可*?

final Pattern pattern = Pattern.compile(".*?(M+).*?");
final String string = "somerandoMMMstring";
final Matcher m = pattern.matcher(string);
if (m.find()) {
    System.out.println(m.group(1));
}

输出:

  

MMM

答案 1 :(得分:2)

您可以使用Matcher API:

String str = "somerandoMMMstring";
Pattern p = Pattern.compile("M+");
Matcher m = p.matcher(str);
if (m.find()) {
    System.err.printf("match: %s, start: %d, end: %d%n", m.group(), m.start(), m.end());
}

<强>输出:

match: MMM, start: 9, end: 12

答案 2 :(得分:0)

这应该有效:.*[^M](M+)[^M].*