【发布时间】:2013-01-17 20:34:10
【问题描述】:
我刚刚从文档中了解了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"
谁能帮我理解一下?
编辑
在这里,我尝试了两个带有“零宽度断言”概念的 sn-ps,如下所示:
irb(main):002:0> "foresight".sub(/(?!s)ight/, 'ee')
=> "foresee"
另一个没有“零宽度断言”的概念如下:
irb(main):003:0> "foresight".sub(/ight/, 'ee')
=> "foresee"
以上都产生相同的输出,现在regexp 在内部如何自行移动以产生输出 - 你能帮我想象一下吗?
谢谢
【问题讨论】:
标签: ruby regex ruby-1.9.3