正規表現を自分で考えて書けるようになりたい。。


正規表現とは、、?

文字列の集合を一つの文字列で表現する方法の一つである。
正規表現では、「メタ文字」という特殊な文字を使って表現します。(ちなみに全て半角です。)

メタ文字の種類と使い方

  • なんでもいい1文字「.」
    • 半角の「.」を使用すると、なんでもいい1文字を表現することができる。

-例-


私は.です
#=>私は鳥です、私は馬です、私は0です...etc
  • 行の先頭と最後「^」「$」
    • 行の先頭や最後にのみ存在する文字列を検索できる。

-例-


^ありがとう$ 
#=>「ありがとう」の文字だけのある行に合致
  • 同じ文字の繰り返し「*」「+」「?」
    • 「*」は、直前の文字がないか、直前の文字が1個以上連続するという意味。
    • 「+」は、最低でも1個は + の直前の文字がないといけなく、その後は連続するという意味。
    • 「?」は、直前の文字がまったくないか、1つだけあるという意味。

-例-


おー*
#=> おい、おーーい、おーーーーい...etc

おー+
#=>おーい、おーーい、おーーーーい...etc

おー?
#=>おい、おーい...etc
  • いずれかの文字列「|」
    • | で区切られた文字列のいずれかの文字列が存在した時に、正規表現に合致。

-例-


IBM|マイクロソフト|Apple|ネットスケープ
#=>IBM マイクロソフト Apple ネットスケープ
  • 指定した文字のどれか「[ ]」
    • [ ] で括られた中の文字は、その中のどれか1つに合致する。
    • [ ]の中ではメタ文字は普通の文字として認識される。

-例-


[A-Z]CCC
#=>A[ABCDEFGHIJKLMNOPQRSTUVWXYZ]CCC 

[0-9]CCC
#=>A[0123456789]CCC

[A-Z0-9]CCC
#=>Aで始り、次の文字が半角の大文字アルファベットか数字で、CCCで終わる文字列の検索
  • グループ化「( )」
    • まとめて数文字単位で処理できる。

-例-


(じゃ)+ーん
#=>じゃーん、じゃじゃーん、じゃじゃじゃーん...etc

明日(ぼく|わたし)は帰宅します
#=>明日ぼくは帰宅します、明日わたしは帰宅します...etc

よく使う正規表現一覧


# 全て数値(全角)
/\A[-]+\z/

# 全て数値(半角)
/\A[0-9]+\z/

# 全て数値(全角,半角)
/\A[0-9-]+\z/

# 半角アルファベット(小文字)
/\A[a-z]+\z/

# 半角アルファベット(大文字)
 /\A[A-Z]+\z/

# 半角アルファベット(大文字・小文字)
 /\A[a-zA-Z]+\z/

# 半角アルファベット(小文字・数値)
/\A[a-z0-9]+\z/

# 半角アルファベット(大文字・数値)
/\A[A-Z0-9]+\z/

# 半角アルファベット(大文字・小文字・数値)
/\A[a-zA-Z0-9]+\z/

# 全角ひらがな
/\A[-んー]+\z/

# 全角カタカナ
/\A[-ヶー]+\z/

# 全角ひらがな、カタカナ
/\A[-んァ-ヶー]+\z/

# 半角カナ
/\A[-ン゙゚]+\z/

# 郵便番号(ハイフンあり3桁・5桁・7桁)
/\A\d{3}-\d{4}$|^\d{3}-\d{2}$|^\d{3}\z/

# 郵便番号(ハイフンあり5桁)
/\A\d{3}-\d{2}\z/

# 郵便番号(ハイフンあり7桁)
/\A\d{3}-\d{4}\z/

# 郵便番号(ハイフンなし3桁)
/\A\d{3}\z/

# 郵便番号(ハイフンなし5桁)
/\A\d{5}\z/

# 郵便番号(ハイフンなし7桁)
/\A\d{7}\z/

# 電話番号(ハイフンなし10桁)
/\A\d{10}\z/

# 携帯番号(ハイフンなし11桁)
/\A\d{11}\z/

# 携帯番号(ハイフンなし10桁or11桁)
/\A\d{10,11}\z/

# e-mail
 /\A\S+@\S+\.\S+\z/

# URL
/\Ahttps?:\/\/([\w-]+\.)+[\w-]+(\/[\w-.\/?%&=]*)?/

# クレジットカード(VISA,Master,Diners,Discover,Amex対応)
/\A(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6011[0-9]{12}|3(?:0[0-5]|[68][0-9])[0-9]{11}|3[47][0-9]{13})\z/

参考

サルにもわかる正規表現入門

Rubyアソシエーション:正規表現

Rubyのバリデーション用正規表現集