✳️ Rubyの正規表現の記法
#RubySilver
前提: matchは最初にマッチした部分だけ返す。
https://gyazo.com/20b7b0f5ad07d3a85815a57b6497831a
^:
^H: 「行頭がH」にマッチ。^[H]と同じ。
[^H]: 「H以外の1文字」にマッチ
code: .rb
# 行頭 を指定
"Hello, world!".match(/^H/)
=> #<MatchData "H">
# ~以外
"Hello, world!".match(/^H/) # H以外の1文字にマッチする
=> #<MatchData "p">
# 両方使う
"Say! Hello, world!".match(/^^H/) # 行頭が、H以外の文字で始まる
=> #<MatchData "S">
# delete! で ^ が出たら否定*否定なので、「渡された文字を残す」と考える
str = "-1234567890-"
str.delete!("^2-41-") #
str
=> "-1234-"
正規表現じゃない時に^を使う
code:.rb
"0123456789-".delete("^13-56-")
# この^は「〜以外」
# なので、13-56- = 13456- 以外 = 02789 を削除する
# 02789 を削除した後の文字列は、
=> "13456-"
まとめ
^が[]の外だと「行頭」、内だと「〜以外」
.: 改行以外の1文字
\w: 英数字とアンダースコアにマッチする
\W: 英数字とアンダースコアではない文字にマッチする。
|: OR
/(cat|dog)/ : catまたはdog
/cat|dog/優先順位が低いので、catまたはdog と解釈される
模擬問題
code:.rb
# Ruby か rubyにマッチする正規表現
/\ARruby\z/
/\ARruby\z/
/\A(Ruby|ruby)\z/
# 不正解
/\ARuby|ruby\z/
# \ARuby もしくは ruby\z/ という分け方になる
# | の右側には \A が適用されないので、"xxxruby" のような文字列にもマッチしちゃう
/\AR|ruby\z/
# \AR もしくは ruby\z/ という分け方になる
# "R"," Rxxxx", "xxxxruby" にもマッチしちゃう