我不明白为什么正则表达式(?<=i:(?>\D*))\d
does not match字符串i:>1
。
我理解它的方式:
i
将不匹配i:
将不匹配i:(?>\D*)
将匹配i:
但在后面看后面的\d
将不匹配>
i:(?>\D*)
将匹配i:>
和\d
后看后卫将匹配1
- >正则表达式满意见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]*
匹配任何char但:
和数字,因此只有i:
和i:
仍然有匹配。