我有一个字符串
String string = "number0 foobar number1 foofoo number2 bar bar bar bar number3 foobar";
Run Code Online (Sandbox Code Playgroud)
我需要一个正则表达式给我以下输出:
number0 foobar
number1 foofoo
number2 bar bar bar bar
number3 foobar
Run Code Online (Sandbox Code Playgroud)
我试过了
Pattern pattern = Pattern.compile("number\\d+(.*)(number\\d+)?");
Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println(matcher.group());
}
Run Code Online (Sandbox Code Playgroud)
但这给了
number0 foobar number1 foofoo number2 bar bar bar bar number3 foobar
Run Code Online (Sandbox Code Playgroud)
Tim*_*ker 10
所以你想要number(+一个整数)后跟任何东西,直到下一个number(或字符串的结尾),对吗?
然后你需要告诉正则表达式引擎:
Pattern pattern = Pattern.compile("number\\d+(?:(?!number).)*");
Run Code Online (Sandbox Code Playgroud)
在你的正则表达式中,.*尽可能匹配 - 直到字符串结尾的所有内容.此外,你将第二部分(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.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
916 次 |
| 最近记录: |