Zero-Width Assertionsドキュメントからコンセプトを確認しました。そして、いくつかの簡単な質問が私の頭に浮かびます-
- なぜそのような名前
Zero-Width Assertions? Look-aheadandlook-behindコンセプトはそのような コンセプトをどのようにサポートしZero-Width Assertionsますか?- そのような
?<=s、、、<!s- 4つのシンボルがパターン内で指示していますか=s?<=sここで私が実際に何が起こっているのかを理解するために集中するのを手伝ってくれませんか
また、ロジックを理解するためにいくつかの小さなコードを試しましたが、それらの出力にはそれほど自信がありませんでした。
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"
誰かが私がここで理解するのを手伝ってもらえますか?
編集
ここでは、以下のように「ゼロ幅アサーション」の概念を持つ2つのスニペットを試しました。
irb(main):002:0> "foresight".sub(/(?!s)ight/, 'ee')
=> "foresee"
もう1つは、以下のような「ゼロ幅アサーション」の概念がない場合です。
irb(main):003:0> "foresight".sub(/ight/, 'ee')
=> "foresee"
上記の両方が同じ出力を生成しますが、内部的には両方がどのようにregexp動き、出力を生成しますか?視覚化するのを手伝ってもらえますか?
ありがとう