正規表現で複数の条件指定をする

正規表現で、半角英数混合(半角英字のみ、半角数字のみは不可)を判定する必要が出た。
調査したり、いろいろ考えた結果、

^(?=.*([0-9]))(?=.*([A-z]))[A-z0-9]*$

という結論に達した。

肯定先読みの結果は先読み前の位置に戻ることを利用して、

  1. 何かの文字列を読み飛ばして半角数字を見つける
  2. 肯定先読みなので行頭に戻る
  3. 何かの文字列を読み飛ばして半角英字を見つける
  4. 肯定先読みなので行頭に戻る
  5. 半角英数のみで文字列が構成されているか調べる

でいけた。

(?=.*(条件A))(?=.*(条件B))で同じ部分から複数の条件判定ができる。
否定したいときは(?!.*(条件))かな?試してないけど。

参考: