Java正则表达式量词

b3bop:

我有一个像

String string = "number0 foobar number1 foofoo number2 bar bar bar bar number3 foobar";

我需要一个正则表达式给我以下输出:

number0 foobar
number1 foofoo
number2 bar bar bar bar
number3 foobar

我努力了

Pattern pattern = Pattern.compile("number\\d+(.*)(number\\d+)?");
Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
    System.out.println(matcher.group());
}

但这给

number0 foobar number1 foofoo number2 bar bar bar bar number3 foobar
Pietzcker团队:

因此,您想要number(+一个整数)后跟任何内容,直到下一个number(或字符串结尾),对吗?

然后,您需要告诉正则表达式引擎:

Pattern pattern = Pattern.compile("number\\d+(?:(?!number).)*");

在您的正则表达式中,.*尽可能匹配-直到字符串结尾的所有内容。另外,您(number\\d+)?将比赛的第二部分本身做了。

我的解决方案说明:

number    # Match "number"
\d+       # Match one of more digits
(?:       # Match...
 (?!      #  (as long as we're not right at the start of the text
  number  #   "number"
 )        #  )
 .        # any character
)*        # Repeat as needed.

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章