正規表現で否定を表現する
Table of Contents
常時必要ではないけれど、忘れた頃にやってきて、覚えようにも複雑な正規表現の否定表現。
いっつも検索していろんなサイトにお世話になっているけれど、訪れるサイトはいつもバラバラで、欲しい情報を見つけるのに時間がかかる。そんな毎日なので、自分用に否定表現用の記事を用意しました。
書き方
結論から先に書きます。
^(?!.*検索ワード).+$
何が起きているのか?
^
: 行の先頭を表す(
: グルーピング?!
: 否定の先読み. 部分式が後にマッチしないなら、真とする。.*
: 任意の文字列(0文字以上))
: グルーピング.+
: 任意の文字列(1文字以上)$
: 行の末尾を表す
試してみる
色々と削って動きを見てみることしました。
あいうえお
かきくけこ
あい
あ
い
いう
に対して色々試してみる。
正規表現 | 結果 |
---|---|
^(?!あ) |
「あ」の入っていない文字列と空改行がヒットする |
^(?!あ)$ |
空改行のみヒットする |
^(?!あい). |
「あい」の入っていない行の1文字目と空改行がヒットする |
^(?!いう).* |
行の先頭に「いう」の入っていない行と空改行がヒットする |
^(?!.*いう).* |
行に「いう」の入っていない行と空改行がヒットする |
^(?!.*いう).+ |
行に「いう」の入っていない行がヒットする |
^(?!.*いう) |
行に「いう」の入っていない行の先頭がヒットする |
- ()は()内の文字を1文字として扱う. セットみたいなイメージ.
- ?!は否定の先読み、後ろの続く言葉がヒットしないなら真となる
- (?!.*いう)とは「いう」がないなら真となる、いわば「いう否定セット」みたいなもの
つまり^(?!.*いう).+$
とは「いう否定セット」の入っていない1文字以上を検索となる