\d は「半角数字1文字」を表す
\d は「1個の半角数字(0123456789)」を意味するメタ文字です(文字の集合を表しているので、特に 「文字クラス」 と呼ばれます)。
{n,m} は「直前の文字が n 文字以上、m 文字以下」であることを表す
/\d{1,3}/
=>1桁以上3桁以下
○ 1, 43, 576
✖️ 3451, 05969
{n} は「直前の文字がちょうど n 文字」であることを表す
/\d{4}/ => 4桁
/3{5}/ => 33333
[AB] は「AまたはBが1文字」であることを表す
/[OK]/ => OかK
[a-z] と [-az] ではハイフンの意味が異なる
/[a-c]/ => abc
/[-ac]/ => -かaかc
正規表現の正確さと複雑さはトレードオフになることが多い
メールアドレスの正規表現は下記の通り。
複雑で考えていると莫大な時間を使ってしまうため、ある程度に抑えることもしばしばある。
(?:[a-z0-9!#$%&'+/=?^_{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_
{|}~-]+)|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\[\x01-\x09\x0b\x0c\x0e-\x7f])")@(?:(?:a-z0-9?.)+a-z0-9?|[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-][a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\[\x01-\x09\x0b\x0c\x0e-\x7f])+)])
区切り文字が1文字、 もしくは区切り無し
「~が1文字、または無し」を表現するためには ? というメタ文字を使います。(文字量を指定するので 量指定子 のひとつです)
/フランシスコ・?ザビエル/ => フランシスコ・ザビエルかフランシスコザビエル
任意の1文字
「任意の1文字」を表す . というメタ文字(文字クラス)があります。
/オリバー.カーン/ => オリバー カーンやオリバー・カーンやオリバー@カーン
対象の言葉を含む1行を抜き出す
オリバーカーン等を含む1行を文章から抜き出す。
text.split(/\n/).grep(/オリバー.?カーン/)