私は正規表現のPerlの正規表現の単語境界等価
\ba
が
(?<!\w)a
と同等ですが、その前に、私は多分
^a|\Wa
があまりにも同等であることを考え出していたことを読んで
質問:Wha tはそれらの2つの違いですか?誰かが等価でない場合は、例を書くことができますか?
私は正規表現のPerlの正規表現の単語境界等価
\ba
が
(?<!\w)a
と同等ですが、その前に、私は多分
^a|\Wa
があまりにも同等であることを考え出していたことを読んで
質問:Wha tはそれらの2つの違いですか?誰かが等価でない場合は、例を書くことができますか?
\b
ので
\ba
が(?:(?<!\w)(?=\w)|(?<=\w)(?!\w))a
と同等であるので、
\ba
が(?<!\w)a
a
ためマッチ\w
に相当し、(?:(?<!\w)(?=\w)|(?<=\w)(?!\w))
と等価です。
両方\ba
と(?<!\w)a
は時折交換可能であるという点に両方^a|\Wa
と(?:^|\W)a
に類似しているが、前者の二つの単一文字に一致し、後者の二つは、2つに一致することができるので、それらが異なっています。比較:これは、彼らは同じではありませんなぜ私が提供できる最短一例である!a
と一致します!a
^a|\Wa
ながら
say '[email protected]#$' =~ s/\ba//r; # [email protected]#$
say '[email protected]#$' =~ s/(?<!\w)a//r; # [email protected]#$
say '[email protected]#$' =~ s/^a|\Wa//r; # !#$
say '[email protected]#$' =~ s/(?:^|\W)a//r; # !#$
\ba
は、文字列のa
と一致します。
'!'は非単語文字なので、間違っていると思います。正規表現 '\ Wa'は文字列'!a'と一致します。 –
あなたは正しいです、私はそれを後ろに書きました。 –
'(?<!\ w)'は単語の先頭にのみ一致し、 '\ b'は単語の両端にアサートされます。 – dawg
@dawgはいですが、 'a'は単語文字です。つまり、' \ ba'では '\ b'は非単語が左側にある場合のみで満足できます。 – hobbs