良く理解しないで書いてます。
【例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) |