RegexBuilder: A DSL for creating regular expression
Posted on 2006-11-24 17:24 切爾斯基 閱讀(2389) 評(píng)論(2) 編輯 收藏
/* 最新版本請(qǐng)參見 http://www.aygfsteel.com/chelsea/archive/2007/12/16/168118.html */
找了半天也沒有找到創(chuàng)建正則表達(dá)式的DSL, 如果你知道請(qǐng)告訴我
只好先自己寫來(lái)應(yīng)急了: http://roll-stone.googlecode.com/svn/trunk/RegexBuilder/
用起來(lái)類似這樣:
require 'regex_builder'
class RegexBuilderTest < Test::Unit::TestCase
def setup
@rb = RegexBuilder. new
end
def test_ruby_start_with_r
pattern = @rb .start_with( "r" ).to_s
assert "ruby" .match(pattern)
end
def test_ruby_start_with_r_and_end_with_y
pattern = @rb .start_with( "r" ).any().end_with( "y" ).to_s
assert "ruby" .match(pattern)
end
end
還有一個(gè) RegexUtil 來(lái)直接提供常用的正則表達(dá)式, 如email地址,ip地址等,想到啥都可以往里加
require 'regex_util'
class RegexUtilTest < Test::Unit::TestCase
def test_192_168_0_3_is_a_valid_ip_address
assert "192.168.0.3" .match(RegexUtil::IP_Pattern)
end
def test_500_312_0_3_is_not_a_valid_ip_address
assert_nil( "500.312.0.3" .match(RegexUtil::IP_Pattern) )
end
def test_chelsea_at_gmail_dot_com_is_a_valid_email_address
assert "chelsea@gmail.com" .match(RegexUtil::Email_Pattern)
end
def test_www_dot_google_dot_com_is_not_a_valid_email_address
assert_nil( "www.google.com" .match(RegexUtil::Email_Pattern) )
end
end
很多功能都還沒提供,希望有人一起來(lái)做