エンジニアのひよこ_level10

【毎日更新!】新卒4年目エンジニアブログです!

【正規表現】列検索において、AND、OR、NOTの表現【895日目】

正規表現でAND、OR、NOTをしたい

検索でAND、OR、NOTをしたい。

検索機能を実装するにあたって、そのベースとなる正規表現を作りたい。
(本当はそんなことしたくないが)

書き方

OR: 検索A|検索B

AND: ^(?=.*検索A)(?=.*検索B)

NOT: ^(?!.*検索文字列)

仕組み

ORは省略

AND

^(?=.*検索A)(?=.*検索B)

^ この部分は、『先頭の位置』を指す。

(?=) は、直後にその後の文字列が来る『位置』を探す。
文字ではないのが重要。

先頭から、その後の文字列が来る『位置』を探すのにあたって、
検索Aの左はワイルドカードで任意の文字となるために、探査が成功した場合は先頭の位置を指す。
文字自体に干渉していないために、検索Bの検索範囲は先頭からになる。

従って、両方の文字列を満たす場所を探査することになる。

また、『直後に該当文字列が来る』位置を探すので、検索文字の後に .*を書く必要がない

NOT

^(?!.*検索文字列)

^ この部分は、『先頭の位置』を指す。

(?!) は、選択した文字を含まない検索を行います。

先頭から選択した文字を含まないものを探索するので、NOT検索になります。