技術をかじる猫

適当に気になった技術や言語、思ったこと考えた事など。

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