posts - 56, comments - 77, trackbacks - 0, articles - 1
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

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


以上是应用 RegexBuilder 书写正则表达式例如 IP 地址的一个例子.

RegexBuilder 的目的是试图增强正则表达式的可读性和可维护性

RegexBuilder 并不是用来取代 Regexp 的, 而是辅助编写 Regexp 构造函数需要的第一个参数.

RegexBuilder 包含了正则表达式符号(Anchors/Character Classes/Repetition/Alternation/Grouping)到 API 的一一对应, 如 one_of => |, either => [], at_least_one => + 等.

RegexBuilder 还包含了可以直接使用的一组常见的正则表达式, 如 IP 地址, Email 地址等.

 

RegexBuilder 使用了Java风格的API而不是Ruby风格的API, 如 repeat(3, digit()) 而不是 digit(:repeat => 3)

RegexBuilder 还没实现Substitutions, 如 \0, \1, \& 等.

 

安装下载

gem install regexbuilder

http://roll-stone.googlecode.com/svn/trunk/RegexBuilder/


只有注册用户登录后才能发表评论。


网站导航: