(肯|否)先読みとは
何らかの正規表現を (?= と ) もしくは (?! と ) で括ることで,括られた正規表現にマッチする文字列が直後に存在する/存在しないことを指定してマッチングを行う。
使用例としては「hoge」という文字列を含むや「hoge」のあとに「fuga」が来たらマッチさせるなどといった場合に使える
使用例
先読み
「hoge」がありかつその後に「fuga」がある
/hoge(?=fuga)/
# match例
# hogefuga
# matchしない例
# hogeefuga
「hoge」を含まない
/^(?!.*hoge).*$/
# match例
# fugafuga
# matchしない例
# fugafugahogefuga
「hoge」または「fuga」を含まない
/^(?!.*(hoge|fuga)).*$/
# match例
# foobar
# matchしない例
# higehoge
「hoge」を含むが「fuga」を含まない
/^(?=.*abc)(?!.*def).*$/
# match例
# hogehoge
# matchしない例
# hogefuga
# fugahoge
「hoge」で始まらない
/^(?!hoge).*$/
# match例
# fuga
# matchしない例
# hogefuga
後読み
肯定後読みは (?<=)
否定後読みは (?<!)
と書いて表します。
「fuga」が直前にある「hoge」
/(?<=fuga)hoge/
# match例
# fugahoge
# afugahoge
# matchしない例
# fuga hoge
「fuga」が直前にない「hoge」
/(?<!fuga)hoge/
# match例
# fuga hoge
# matchしない例
# fugahoge
参考記事
正規表現の先読み・後読みを極める!
[コラム] 正規表現の先読み/後読みは、どう考えても名前が悪いので、呼称禁止令を出してルックと気軽に呼んでみませんか。