方式使用正则表达式
问题描述:
我工作2例部分匹配一个Ruby字符串:方式使用正则表达式
假设我有那些变种:
a = "hello"
b = "hello-SP"
c = "not_hello"
任何部分匹配
我想接受任何字符串里面有变量a
,所以b
和c
会匹配。带图案匹配
我想匹配了a
内的字符串,然后'-'
,所以b
将匹配,c
没有。
我有问题,因为我一直使用的语法/expression/
定义的正则表达式,所以如何动态地对Ruby的定义正则表达式?
答
您可以使用相同的语法的正则表达式使用变量,所以:
reg1 = /#{a}/
会匹配任何包含a
变量的值(当时的表达是创建!)和
reg2 = /#{a}-/
会做同样的事,再加上一个连字符,所以hello-
在你的例子中。
编辑:韦恩·康拉德指出,如果a
包含“将在正则表达式特殊含义的任何字符,”你需要躲避他们的。例如:
a = ".com"
b = Regexp.new(Regexp.escape(a))
"blah.com" =~ b
答
晚发表评论,但我没能找到我一直在寻找答案,提到上面for.The没有帮助me.Hope它帮助别人新的红宝石谁只是想速战速决。
红宝石代码:
st = "BJ's Restaurant & Brewery"
#take the string you want to match into a variable
m = (/BJ\'s/i).match(string) #(/"your regular expression"/.match(string))
# m has the match #<MatchData "BJ's">
m.to_s
# this will display the match
=> "BJ's"
另一种选择是使用Regexp.new,即'REG2 = Regexp.new( “#{A} - ”)'。 – 2010-04-28 18:11:19
@格雷姆坎贝尔,是的,但这是更多的字母:) – 2010-04-28 18:56:54
如果'a'可能有任何正则表达式元字符(周期,明星等),然后将其包装在'Regexp.escape'的调用中。 – 2010-04-29 13:51:06