20190506のPerlに関する記事は1件です。

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

参考記事

正規表現の先読み・後読みを極める!
[コラム] 正規表現の先読み/後読みは、どう考えても名前が悪いので、呼称禁止令を出してルックと気軽に呼んでみませんか。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む