ume

正規表現を翻訳

前書き

下記の正規表現の意味を一つ一つ分解し理解を深める

/\A(?=.*\d)(?=.*[a-zA-Z])[a-zA-Z0-9]+\z/

\A

⇨先頭文字を評価

()

→グループ化. 評価する文字に()内で指定した複数文字をがあるか調べる.
例(じゃ)+ーん.
マッチする文字

じゃじゃーん
じゃじゃじゃーん

+は直前の一文字以上が評価する文字にあるのか調べる.
例じゃ+-ん⇨「ゃ」が一文字以上あるのか調べる

?

⇨直前の文字がないか、1つだけある.
Windows?
マッチする値

window 
windows

例 wind?ows マッチしない

winddows

.

→一文字だったらなんでも良い マッチしない例がなぜいけないかというと

saru 先頭がzではない
maru 先頭がzではない
zau 文字数が足りない

*

アスタリスクの前の文字(u)が評価する文字の中になくてもいいし1文字以上あってもいい

例. maru*にマッチするかどうかを調べる

マッチする例

mar  #アスタリスクの前のuが評価する文字(mar)の中になくてもいい
maruuuuuuuuuu #アスタリスクの前のuが評価する文字(mar)の中に一文字以上あってもいい

マッチしない例

mavu

\d

⇨半角数字

例 3 マッチする例

342142

マッチしない例

12314

⇨はブランケットという。[]内の文字や数字にマッチするか調べる.
例 [a].
マッチする例

a  
aaaaa

マッチしない例

b
1

-を使うことで範囲を示す.
例. [a-z] ⇦a~zまでのアルファベットにマッチするか調べる.
マッチする例

b
cb

マッチしない例

1
23

+

⇨+の直前の文字(u)が評価する文字の中に一文字以上ある.
例 maru+.
マッチする文字

maru #評価する文字(maru)の中にuが入っているのでマッチする
maruuuuuuu #評価する文字の中に一文字以上uがあるのでマッチする

マッチしない文字

mar
marf

\z

⇨\z 文字列の末尾にマッチします.
⇨\Z 文字列の末尾にマッチします。 ただし文字列の最後の文字が改行ならばそれの手前にマッチします.
要は語尾が改行だったら改行を評価するのが\zで開業の直前まで評価するのが\Z

# 末尾が改行文字、正規表現は小文字の \z
"03-1234-5678\n" =~ /\A\d+-\d+-\d+\z/
# => nil (Rubyの世界では偽)

# 末尾が改行文字、正規表現は大文字の \Z
"03-1234-5678\n" =~ /\A\d+-\d+-\d+\Z/
# => 0 (Rubyの世界では真)

参考情報

https://www.youtube.com/watch?v=T7Y2kfMm7kk

regex-checker.com