原子团如何在正面的背后工作?

时间:2018-01-03 21:29:01

标签: .net regex lookbehind

我不明白为什么正则表达式(?<=i:(?>\D*))\d does not match字符串i:>1

我承担的方式:

  • 在索引0处:lookbehind i赢得了
  • 索引1处的
  • :lookbehind i:赢了
  • 索引2处的
  • :lookbehind i:(?>\D*)将与i:匹配,但在lookbehind之后的\d>
  • 匹配 索引3处的
  • :lookbehind i:(?>\D*)将匹配i:>,而lookbehind之后的\d将匹配1 - &gt;正则表达式是否满足

1 个答案:

答案 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:仍然有匹配。