パターン | 意味 | 例 | ||
---|---|---|---|---|
パターン | 文字列と結果 | |||
^ | 先頭にマッチする | “^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) |