「文字列1」又は「文字列2」を含み、「文字列3」「文字列4」を含まない行を検索する

「行検索」の正規表現サンプル

やりたいこと

「文字列1」又は「文字列2」を含み、「文字列3」「文字列4」を含まない行を検索する

 

正規表現

^(?!.*(CCC))(?!.*(DDD)).*(AAA|BBB).*$
又は
^(?!.*(CCC|DDD)).*(AAA|BBB).*$

赤文字:メタ文字
※上記の正規表現:文字列1を「AAA」、文字列2を「BBB」、
         文字列3を「CCC」、文字列4を「DDD」とする場合

 

検索結果

検索前

AAA
BBB
CCC
DDD
AAABBB
AAACCC
AAADDD
BBBAAA
BBBCCC
BBBDDD
CCCDDD
DDDAAA
AAABBBCCC
AAABBBDDD
AAACCCDDD
BBBAAACCC
BBBCCCDDD
AAACCCBBBDDD

検索後

AAA
BBB

CCC
DDD
AAABBB
AAACCC
AAADDD
BBBAAA
BBBCCC
BBBDDD
CCCDDD
DDDAAA
AAABBBCCC
AAABBBDDD
AAACCCDDD
BBBAAACCC
BBBCCCDDD
AAACCCBBBDDD

赤文字:条件に一致する文字列

解説

■^
 先頭を表します。

■(?!.*(CCC))
 (?!~):否定先読みを表します。
 .:改行以外のすべての文字を表します。
 *:直前のパターンの0回以上の繰り返しを表します。
 よって、(?!.*(CCC))は「CCC」にはマッチしないことを表します。

■(?!.*(DDD))
 (?!~):否定先読みを表します。
 .:改行以外のすべての文字を表します。
 *:直前のパターンの0回以上の繰り返しを表します。
 よって、(?!.*(DDD))は「DDD」にはマッチしないことを表します。

■.*
 .:改行以外のすべての文字を表します。
 *:直前のパターンの0回以上の繰り返しを表します。
 よって、.*は改行以外の文字が「ない」あるいは「1文字以上ある」状態を表します。

■(AAA|BBB)
 |:「又は」を表します。
 よって、(AAA|BBB)は「AAA」と「BBB」にマッチします。

■$
 行末を表します。

■(?!.*(CCC|DDD))
 (?!~):否定先読みを表します。
 .:改行以外のすべての文字を表します。
 *:直前のパターンの0回以上の繰り返しを表します。
 |:「又は」を表します。
 よって、(?!.*(CCC|DDD))は「CCC」と「DDD」にはマッチしないことを表します。