我刚刚Zero-Width Assertions
从文档中了解了这个概念。我想到了一些快速的问题-
- 为什么这样的名字
Zero-Width Assertions
? Look-ahead
和概念如何look-behind
支持这样 的Zero-Width Assertions
概念?- 什么样
?<=s
的 ,<!s
,=s
,<=s
- 4 符号在模式中指示?你能帮我集中精力了解实际发生的事情吗
我还尝试了一些小代码来理解逻辑,但对这些代码的输出没有那么自信:
irb(main):001:0> "foresight".sub(/(?!s)ight/, 'ee')
=> "foresee"
irb(main):002:0> "foresight".sub(/(?=s)ight/, 'ee')
=> "foresight"
irb(main):003:0> "foresight".sub(/(?<=s)ight/, 'ee')
=> "foresee"
irb(main):004:0> "foresight".sub(/(?<!s)ight/, 'ee')
=> "foresight"
任何人都可以在这里帮助我理解吗?
编辑
在这里,我尝试了两个片段,一个具有“零宽度断言”概念,如下所示:
irb(main):002:0> "foresight".sub(/(?!s)ight/, 'ee')
=> "foresee"
另一个没有“零宽度断言”概念,如下所示:
irb(main):003:0> "foresight".sub(/ight/, 'ee')
=> "foresee"
以上都产生相同的输出,现在在内部两者如何regexp
自行产生输出 - 你能帮我想象一下吗?
谢谢