Ruby の勉強してみる(正規表現)
正規表現でパターンマッチかけてみることにする。
p /^sample/ =~ "sample message" p /^sample/ =~ "hello sample message" p /^sample$/ =~ "sample"
「^」で先頭、「$」で末尾。
p /[a-z]/ =~ "s" p /[A-Z]/ =~ "h" p /[^a-z]/ =~ "s"
範囲マッチング。
値の範囲を指定してマッチ。
「^」は否定の意味になる。
面倒なのでまとめていこう。
# 任意の一文字「.」 p /a.b/ =~ "ABCaBc" # / を使った表現一致 p /a%db/ =~ "a7b" # + で 1 回以上の一致(* で 0 回以上、? で 0回か1回) # +? , *? で最短マッチ(文字列取出しとかで有効) p /target level a+/ =~ "target level aaaaaaaaaa" # 複数文字を一まとめ() p /(sample)+/ =~ "iqwhkfasamplesample" # 選択一致 p /(AB|CD)/ =~ "CD"
オプションとかあるけど、面倒なのでここで紹介しない。
そのうちやる。
需要の多そうな一致パターン
p /(http?\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\%]+)/ =~ "なので、更新する気のないサイトのURLは、http://www.white-azalea.net/index.html" p $1
そういや どう書く.org で正規表現雑技とかいう項目があったな。
こんなのが載ってた。
凄いを通り越して笑える。
def isleap( year ) return false unless /((^|[02468])[048]|[13579][26])$/.match( year.to_s ) return true unless /00$/.match( year.to_s ) return false unless /((^|[02468])[048]|[13579][26])00$/.match( year.to_s ) return true end