Rubyの正規表現はRegExpクラス
|
この前後にある正規表現のどちらかと一致
*
直前の正規表現の0回以上の繰り返しに一致
+
直前の正規表現の1回以上の繰り返しに一致
?
直前の正規表現の0回もしくは1回に一致
{m,n}
直前の正規表現のm回以上n回以下の繰り返しに一致
*?
直前の正規表現の0回以上の繰り返しに一致(最短)
+?
直前の正規表現の1回以上の繰り返しに一致(最短)
??
直前の正規表現に0回もしくは1回一致(最短)
{m,n}?
直前の正規表現のm回以上n回以下の繰り返しに一致(最短)
[]
[]内に指定した文字のどれかと一致
[^]
[]内に指定した文字でない場合に一致
.
任意の1文字と一致
^
行頭と一致
$
行末と一致
()
正規表現をグループにまとめる
\
メタ文字を打ち消す
\A
文字列の先頭と一致
\b
単語境界と一致
\B
\B以外と一致
\d
数字と一致
\D
数字以外と一致
\s
空白文字と一致
\S
\s以外と一致
\w
英数字とアンダースコアに一致
\W
\w以外と一致
\z
文字列の末尾と一致
scan()
文字列の中で正規表現と一致した部分文字列をすべて求めたい場合に使うと有効。
重複しない一致部分文字列を配列に格納して返す。
b = "foo 10 bar 20 baz 30"
b.scan(/(\w+)\s+(\d)/)
=>[["foo", "10"],["bar", "20"],["baz", "30"]]
マッチパターン
"文字列" =~ /正規表現リテラル/
"文字列".match(/正規表現リテラル/)
split()
単語区切りを正規表現で指定することができる。
分割する個数を引数limitで指定することができる。
b = "foo bar baz"
b.split(\w+/, 2)
=>["foo", "bar baz"]
emailの正規表現
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates :email, presence: true, format: { with: VALID_EMAIL_REGEX }