RegexBuilder: A DSL for creating regular expression, Request For Comment
Posted on 2007-12-16 21:36 切爾斯基 閱讀(1451) 評論(0) 編輯 收藏class IP
include RegexpBuilder
def less_than_255
_0_to_100 = repeat(digit(), 1, 2)
_100_to_200 = "1" + _0_to_100
_200_to_250 = "2" + either("0-4") + either("0-9")
_250_to_255 = "25" + either("0-4")
one_of(_0_to_100, _100_to_200, _200_to_250, _250_to_255)
end
def initialize
@ip_pattern = repeat(group(group(less_than_255()) + literal(".")), 3) + group(less_than_255())
end
attr_reader :ip_pattern
end
以上是應(yīng)用 RegexBuilder 書寫正則表達式例如 IP 地址的一個例子.
RegexBuilder 的目的是試圖增強正則表達式的可讀性和可維護性
RegexBuilder 并不是用來取代 Regexp 的, 而是輔助編寫 Regexp 構(gòu)造函數(shù)需要的第一個參數(shù).
RegexBuilder 包含了正則表達式符號(Anchors/Character Classes/Repetition/Alternation/Grouping)到 API 的一一對應(yīng), 如 one_of => |, either => [], at_least_one => + 等.
RegexBuilder 還包含了可以直接使用的一組常見的正則表達式, 如 IP 地址, Email 地址等.
RegexBuilder 使用了Java風(fēng)格的API而不是Ruby風(fēng)格的API, 如 repeat(3, digit()) 而不是 digit(:repeat => 3)
RegexBuilder 還沒實現(xiàn)Substitutions, 如 \0, \1, \& 等.
安裝下載
gem install regexbuilder