regex 检索正则表达式模式的所有示例[重复]

wfsdck30  于 2023-06-30  发布在  其他
关注(0)|答案(1)|浏览(111)

此问题已在此处有答案

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结束。如何获得每个独立的迭代:28828217n38729mdnj dnj]spw?我假设有一种方法可以让正则表达式从头开始。
谢谢

5us2dqdw

5us2dqdw1#

  • "...我得到了整个字符串,因为第一个字符串从St开始,最后一个字符串结束于En。..."*

使用 Matcher#group,如果没有指定参数,它将返回整个匹配的值-而不仅仅是 * 捕获组 *。
这个模式的问题是它应该使用一个 lazy-quantifier?
这将匹配第一个遇到的En,而不是最后一个。

St(?s)(.*?)En

从这里开始,要返回捕获的组的值,请提供数字作为值。
组号从 1 开始-一个 0 将返回整个匹配,类似于您当前拥有的。

  • Matcher#group(Java SE 20和JDK 20)*。
matc.group(1)

相关问题