正規表現について

パターン 意味
パターン 文字列と結果
^ 先頭にマッチする “^ab” “abcd” => true
“cdab” => false
$ 末尾にマッチする “ab$” “abcd” => false
“cdab” => true
. 任意の1文字にマッチする “a.c” “abc” => true
“abbc” => false
“ac” => false
? 直前の文字が0個または1個にマッチする “^A?$” “” => true
“A” => true
“AA” => false
“B” => false
* 直前の文字が0個以上にマッチする “^A*$” “” => true
“A” => true
“AA” => true
“B” => false
+ 直前の文字が1個以上にマッチする “^A+$” “” => false
“A” => true
“AA” => true
“B” => false
\d 半角数値(0-9)にマッチする
※ [0-9]と同じ
“\d” “0123” => true
“0123” => false
“abc” => false
\D 半角数値(0-9)以外にマッチする
※ [^0-9]と同じ
“\D” “0123” => false
“0123” => true
“abc” => true
\w 半角英数値(0~9、a~z、A~Z、_)にマッチする
※ [0-9a-zA-Z_]と同じ
“\w” “012_AbC” => true
“12Ab” => false
“#$%&” => false
\W 半角英数値(0~9、a~z、A~Z、_)以外にマッチする
※ [^0-9a-zA-Z_]と同じ
“\w” “012_AbC” => false
“12Ab” => true
“#$%&” => true
[ ] いずれかの文字とマッチする “[ABC]” “A” => true
“B” => true
“D” => false
( ) 1つのグループとして扱う “(ABC)” “ABC” => true
“CBA” => false
{n} 直前の文字にn回マッチする “^A{3}$” “AA” => false
“AAA” => true
“AAAA” => false
{n,} 直前の文字にn回以上マッチする “^A{3,}$” “AA” => false
“AAA” => true
“AAAA” => true
{n,m} 直前の文字にn回以上m回以下マッチする “^A{3,4}$” “AA” => false
“AAA” => true
“AAAA” => true
“AAAAA” => false
| いずれかとマッチする “ABC|DEF” “ABC” => true
“DEF” => true
“CBA” => false
“DE” => false
範囲を指定する “[3-7]” “2” => false
“3” => true
“7” => true
“8” => false
^ 否定([ ]の中で使用する) “[^AB]” “A” => false
“B” => false
“C” => true
&& かつ “[0-9&&[^4]]” “3” => true
“4” => false
“5” => true

肯定先読み・否定先読み

良く理解しないで書いてます。

【例1】
パターン:(?=.*?[A-Z])^[0-9]{3,}
結果
"1"=>False "B"=>False "1A"=>False "2AAA"=>False
"333"=>False "333A"=>True "4444BBBB"=>True "@555C"=>False

(?= )肯定先読みの部分でA-Zを指定し、312Aや145Bなど、数字の後にA-Zが付いている場合のみマッチする。良く分からないが「.*」がないと再帰的にテストしてくれない。「.*?」の?はなくても動くが、入れた方がパフォーマンスの面で優れているので入れてます。regex101で確認すると面白いです。
regex101.com

【例2】
パターン:(?=.*?[0-9])(?=.*?[#%])(?=.*?[a-z])^[0-9a-z#%]{5,}$
結果
"a1#z4"=>True "aa1bca"=>False "000##34"=>False

肯定先読みで[0-9][#%][a-z]をそれぞれ別に指定し、[0-9a-z#%]の後に[0-9]、[0-9a-z#%]の後に[#%]、[0-9a-z#%]の後に[a-z]のすべての条件を満たした場合のみマッチする。

【例3】否定先読み
パターン:^[a-z0-9]{1,}\.(?!(rms|test)\.)[a-z0-9]{1,}\.rakuten\.co\.jp\/
結果
"glogin.rms.rakuten.co.jp"=>False "basket.step.rakuten.co.jp/rms/"=>True
"grp02.id.rakuten.co.jp/rms/"=>True

RMS以外のログインURLにだけマッチさせる正規表現。

名称 パターン
肯定先読み (?=pattern)
肯定戻り読み (?<=pattern)
否定先読み (?!pattern)
否定戻り読み (?<!pattern)