我不明白为什么正则表达式(?<=i:(?>\D*))\d
does not match字符串i:>1
。
我承担的方式:
i
赢得了i:
赢了i:(?>\D*)
将与i:
匹配,但在lookbehind之后的\d
与>
i:(?>\D*)
将匹配i:>
,而lookbehind之后的\d
将匹配1
- &gt;正则表达式是否满足答案 0 :(得分:2)
请参阅Regular Expressions Cookbook: Detailed Solutions in Eight Programming Languages:
.NET允许你使用lookbehind内的任何东西,它实际上将从右到左应用正则表达式。 lookbehind内的正则表达式和主题文本都是从右向左扫描。
(?<=i:(?>\D*))\d
模式与1
中的i:>1
不匹配,因为原子组(?>\D*)
会阻止任何回溯到其模式。 i:
(实际上,:
然后i
匹配)与\D*
匹配,然后无法将i:
重新匹配为原子小组不允许回溯。
您还可以看到(?<=i:(?>[^:\d]*))\d
will match 1
in i:>1
,因为在此[^:\d]*
匹配除:
和数字之外的任何字符,因此只有i:
和i:
仍然有匹配。