Zero-Width Assertions
ドキュメントからコンセプトを確認しました。そして、いくつかの簡単な質問が私の頭に浮かびます-
- なぜそのような名前
Zero-Width Assertions
? Look-ahead
andlook-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
動き、出力を生成しますか?視覚化するのを手伝ってもらえますか?
ありがとう