【ruby】Rubularで正規表現練習 第三回
いよいよ最終回!正規表現(以下Regex)について、下記サイトRubularで練習していきます。よろしくおねがいしまーす!
(...) :Capture everything enclosed(囲まれたものすべてを取得する)
(a|b) : a or b (a またはb)
a? : Zero or one of a (a が0個または1個)
a* : Zero or more of a (aが0個または1個以上)
a+ :One or more of a (aが1個以上)
a{3} :Exactly 3 of a (aがちょうど3個)
a{3,} :3 or more of a (aが3個以上)
a{3,6} :Between 3 and 6 of a (aが3個から6個)
1. (...)
Capture everything enclosed(囲まれたものすべてを取得する)
ってなんのこっちゃ???
実は、みなさん。これはRubularの隠しコマンド!!なのです。(嘘です。)
普通にRegex欄に/.../を、test string に「ルフィ ゾロ サンジ」といれると,見慣れた画面が出てきます。
でも、RubularのRegex欄に/(...)/を、test string に「ルフィ ゾロ サンジ」といれると、、、
じゃじゃーん!
あれ??なんか一つ欄が増えてる????
そうです!マッチしたものすべてを取得することができるのです!
違うもので試してみましょう
Regex: /(^0[89]0-\d\d\d\d-\d\d\d\d$)/
テストサンプル:
080-1234-5678
090-1234-5678
080-1234-567890
080-dogs-cats
これで、文字列のなかから電話番号だけを抜き出すことができますね!
実際には()はRubyでは使うことはなく、match()関数を使います。
たとえば
text = "080-1234-5678,090-1234-5678,080-1234-567890,080-dogs-cats"
このtextのように、電話番号っぽいものが羅列してあるtextがあって、本当に電話番号のものだけ取り出したいとき、
match = text.match(\b0[89]0-\d\d\d\d-\d\d\d\d\b)
とすると、matchは配列になっていて、中身は、
match[0]が080-1234-5678、
match[1]が090-1234-5678
となります!
2. (a|b)
aまたはbだったら、[ab]で良いのですが、もっと長い文字の場合は、縦棒"|"の出番です!さらに括弧()がついているので、マッチしたものをとりだせます
Regex: /(女性|female)/
テストサンプル:
Emma female
John male
花子 女性
これで、女性が何名いるか調べられます!
3.a?
a が0個または1個
テストサンプル:
きたー!ポケモン最新作
来週FF発売日?
ポケットモンスター劇場版見てきました
いつも心にポケット・モンスター
ポケモン関連のテキストがマッチしていることが分かります。
4.a*
aが0個または1個以上
テストサンプル:
きたー!ポケモン最新作
来週FF発売日?
ポケットモンスター劇場版見てきました
いつも心にポケット!!!!モンスター
5.a+
aが1個以上
テストサンプル:
空欄の名前は省いて取得できます。もし*を使うと、空欄の名前もマッチしてしまいます
テストサンプル:
6.a{3}
aがちょうど3個
前は(^0[89]0-\d\d\d\d-\d\d\d\d$)と書いていたものを、カッコよくできます
Regex: /(^0[89]0-\d{4}-\d{4}$)/
テストサンプル:
080-1234-5678
090-1234-5678
080-1234-567890
080-dogs-cats
7.a{3,}
aが3個以上. お気づきかと思いますが、a{,3}でaが3個以下という意味になります
いままでは080か090で始まる携帯電話を考えていましたが、0120-000-000系の電話番号もヒットさせたい!!
Regex: /(^0\d{,3}-\d{,4}-\d{,4}$)/
テストサンプル:
080-1234-5678
0120-123-456
080-1234-567890
080-dogs-cats
8.a{3,6}
aが3個から6個
もっと電話番号検索を精度よくできそうです
Regex: /(^0\d{2,3}-\d{3,4}-\d{3,4}$)/
テストサンプル:
080-1234-5678
0120-123-456
08-1-5890
080-dogs-cats
やったー!Regex終わったーーーーー!!!
あれ??なんだこれ????
おぷしょん、、、、だと?????
ということで次回、正規表現番外編!を行います!
次こそ本当の最終回。(であってほしい。)
今日はここまで。
おやすみなさいいいいぃぃぃ