此问题已在此处有答案:
Regular Expression to find a string included between two characters while EXCLUDING the delimiters(13个回答)
Regular expression to stop at first match(9个答案)
昨天关门了。
我有这个字符串(示例):
"**St** 28828 **En**, **St** 217n **En**, **St** 38729mdnj dnj]spw **En**"
如果我运行这个代码...
Pattern patt = Pattern.compile("St(?s)(.*)En");
Matcher matc = patt.matcher(vartext);
boolean found = false;
while (matc.find()) {
found = true;
Log.d("LogCalc", matc.group());
}
if (!found) {
Log.d("LogCalc", "Nothing");
}
我得到了整个字符串,我假设是因为第一个字符串从St
开始,最后一个字符串在En
结束。如何获得每个独立的迭代:28828
,217n
,38729mdnj dnj]spw
?我假设有一种方法可以让正则表达式从头开始。
谢谢
1条答案
按热度按时间5us2dqdw1#
St
开始,最后一个字符串结束于En
。..."*使用 Matcher#group,如果没有指定参数,它将返回整个匹配的值-而不仅仅是 * 捕获组 *。
这个模式的问题是它应该使用一个 lazy-quantifier,
?
。这将匹配第一个遇到的
En
,而不是最后一个。从这里开始,要返回捕获的组的值,请提供数字作为值。
组号从 1 开始-一个 0 将返回整个匹配,类似于您当前拥有的。