LoginSignup
5
3

More than 3 years have passed since last update.

perlで正規表現 肯定先読み、否定後読みなど

Last updated at Posted at 2019-05-05

(肯|否)先読みとは

何らかの正規表現を (?= と ) もしくは (?! と ) で括ることで,括られた正規表現にマッチする文字列が直後に存在する/存在しないことを指定してマッチングを行う。

使用例としては「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

参考記事

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

5
3
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3