为什么java(使用Matcher.find())找不到最长的匹配?
regex = "ab*(bc)?"
Run Code Online (Sandbox Code Playgroud)
输入"abbbc"时,正则表达式找到"abbb",而不是"abbbc",它也匹配并且更长.有没有办法强制它匹配最长的字符串?
小智 5
(bc)是一个精确的字符串,因为b*是贪婪的,所以没有找到它,但是(bc)?
是最后一个'b'之后超过的匹配是可选的.你可能想要这样的东西:ab*[bc]?但这种情况很有意义ab*c?.如果这个正则表达式代表更精细的东西,你应该发布这些例子.
以下是正则表达式引擎的看法:
Compiling REx "ab*(bc)?"
Matching REx "ab*(bc)?" against "abbbc"
0 <> <abbbc> | 1:EXACT <a>(3)
1 <a> <bbbc> | 3:STAR(6)
EXACT <b> can match 3 times out of 2147483647...
4 <abbb> <c> | 6: CURLYM[1] {0,1}(16)
4 <abbb> <c> | 10: EXACT <bc>(14)
failed...
CURLYM trying tail with matches=0...
4 <abbb> <c> | 16: END(0)
Match successful!
Compiling REx "ab*[bc]?"
Matching REx "ab*[bc]?" against "abbbc"
0 <> <abbbc> | 1:EXACT <a>(3)
1 <a> <bbbc> | 3:STAR(6)
EXACT <b> can match 3 times out of 2147483647...
4 <abbb> <c> | 6: CURLY {0,1}(19)
ANYOF[bc] can match 1 times out of 1...
5 <abbbc> <> | 19: END(0)
Match successful!
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3313 次 |
| 最近记录: |