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

问题描述 投票:2回答:1

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

我理解它的方式:

  • 在索引0:后面的i将不匹配
  • 在索引1:后面的i:将不匹配
  • 在索引2:后卫i:(?>\D*)将匹配i:但在后面看后面的\d将不匹配>
  • 在索引3:看后面的i:(?>\D*)将匹配i:>\d后看后卫将匹配1 - >正则表达式满意
.net regex lookbehind
1个回答
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]*匹配任何char但:和数字,因此只有i:i:仍然有匹配。

© www.soinside.com 2019 - 2024. All rights reserved.