パスワード強度判定の正規表現と肯定的先読み
数字アルファベット大文字小文字を含む8文字以上の文字列にマッチする正規表現のメモ
条件は正規表現で書くと
^(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])[!-~]{8,}$
となる。
これを可視化すると、
となるが、肯定的先読みがregulexでは表示されていない。 regexper.comでもpositive lookaheadの表記があるのみ。
正規表現なんだからオートマトン で書けるでしょって思ったのだが、結構大変なようである。
中身をちゃんとは読めていないのだが、大きさmの正規表現が状態数O(22m)の決定的有限オートマトンになるらしい。
先読み付き正規表現の有限状態オートマトンへの変換 森畑 明昌, PPL2011 https://www.jstage.jst.go.jp/article/jssst/29/1/29_1_1_147/_pdf