スラッシュで囲むと正規表現オブジェクトに
/正規表現/ #=> スラッシュで囲むと正規表現オブジェクトが作成される
p /a/.class #=> Regexp
便利なサイト
メタ文字まとめ
. ... 任意の1文字
irb
/./
a #=> match
b #=> match
cc #=> match
[] ... []内のいずれか1文字(OR)
/[金銀]の指輪/
金の指輪 #=> match
銀の指輪 #=> match
銅の指輪 #=> unmatch
[^] ... []内のいずれか1文字以外の、任意の1文字([]の否定)
/[^金銀]の指輪/
金の指輪 #=> unmatch
銀の指輪 #=> unmatch
銅の指輪 #=> match
- ... 範囲
/[A-Z]/
B #=> match
a #=> unmatch
あ #=> unmatch
\d ... 半角数字
/\d/
1 #=> match
a #=> unmatch
大文字Dにすると逆(半角数字以外)になる
\w ... 半角英数字とアンダースコア
/\w/
1 #=> match
a #=> match
あ #=> unmatch
大文字Wにすると逆(半角英数字とアンダースコア以外)になる
^, $ ... 先頭と末尾
/^cat$/
cat #=> match
supercat #=> unmatch
catman #=> unmatch
| ... 2文字以上のOR
/デッド|アライブ/
デッド #=> match
アライブ #=> match
サバイブ #=> unmatch
* ... 直前の文字が0回以上続く
/「.*」/
「こんにちは」 #=> match
「こんにちは #=> unmatch
+ ... 直前の文字が1回以上続く
/ど+ーすんの/
どどどどどーすんの #=> match
どーすんの #=> match
どないすんの #=> unmatch
? ... 直前の文字があってもなくても
/https?/
http #=> match
https #=> match
ftp #=> unmatch
{n} ... 直前の文字が n 回続く
/ボ{3}ーボ・ボーボ{2}/
ボボボーボ・ボーボボ #=> match
ボボーボ・ボーボボ #=> unmatch
{n, m} ... 直前の文字が n 回以上 m 回以下続く
/\w{7,31}/
passw0rd #=> match
hoge #=> unmatch
*? ... マッチするもので最も短い範囲にマッチ
>> text = "<h1>Hello</h1>"
=> "<h1>Hello</h1>"
>> p text.scan(/<.*?>/)
["<h1>", "</h1>"]
=> ["<h1>", "</h1>"]
() ... グループ化して、複数の文字をまとめられる
/(ライス|バースデー)ケーキ/
ライスケーキ #=> match
バースデーケーキ #=> match
チーズケーキ #=> unmatch
\n ... n 番目のグループを参照する
/人間(讃歌)は勇気の\1/
人間讃歌は勇気の讃歌 #=> match
/(ド)級の(リトライ)、\1\2/
ド級のリトライ、ドリトライ #=> match
A(?=B) ... 後ろにBがついている時だけAでマッチ
>> text = "120円 100個 70回"
=> "120円 100個 70回"
>> text.scan(/\d+(?=円)/)
=> ["120"]
否定版: A(?!B) ... 後ろにB以外がついている時だけAでマッチ
(?<=A)B ... 前にAがついている時だけBでマッチ
>> text = "かわいいいぬ かわいいねこ ゆかいななかま"
=> "かわいいいぬ かわいいねこ ゆかいななかま"
>> text.scan(/(?<=かわいい)[ぁ-ん]+/)
=> ["いぬ", "ねこ"]