我正在尝试获取特定子字符串的开始和结束索引。
输入字符串:somerandoMMMstring
我的最终目标是在此示例中获取MMM模式的开始和结束索引,但最终得到任意数量的连续M。
我的正则表达式是:.*(M+).*
出于某种原因,第1组正在生成字符串M
。
如何重构我的分组或正则表达式,以便能够获得整个MMM
字符串。
答案 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].*