我刚刚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"
Run Code Online (Sandbox Code Playgroud)
谁能帮助我在这里理解?
编辑
在这里,我尝试了两个片段,其中"Zero-Width Assertions"概念如下:
irb(main):002:0> "foresight".sub(/(?!s)ight/, 'ee')
=> "foresee"
Run Code Online (Sandbox Code Playgroud)
另一个没有"零宽度断言"概念如下:
irb(main):003:0> "foresight".sub(/ight/, 'ee')
=> "foresee"
Run Code Online (Sandbox Code Playgroud)
以上两者都产生相同的输出,现在内部如何regexp通过它们自己移动来产生输出 - 你能帮我形象化吗?
谢谢