java正则表达式量词

标签 java regex

我有一个字符串

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

最佳答案

所以您想要 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.

关于java正则表达式量词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9206735/

相关文章:

java - JAXB 2.1 - 自定义 xs :any binding

java - 检测空白字符串

Java - 运行时.freeMemory()

c# - Regex MatchCollection 得到太多结果

javascript - 如何允许用户通过检查文本框中的某些规则来插入语法方程

java - getJSONObject错误: JSONObject ["..."] is not a JSONObject

java - 有没有办法忽略java中的退格键?

c# - 根据正则表达式拆分字符串

Python Regex Split 以一种奇怪的方式进行交互

php - 删除 <?xml/> 标签及其内容