- 投稿日:2019-05-06T00:07:18+09:00
perlで正規表現 肯定先読み、否定後読みなど
(肯|否)先読みとは
何らかの正規表現を (?= と ) もしくは (?! と ) で括ることで,括られた正規表現にマッチする文字列が直後に存在する/存在しないことを指定してマッチングを行う。
使用例としては「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参考記事
正規表現の先読み・後読みを極める!
[コラム] 正規表現の先読み/後読みは、どう考えても名前が悪いので、呼称禁止令を出してルックと気軽に呼んでみませんか。