2010-04-28 53 views
1

我工作2例部分匹配一个Ruby字符串:方式使用正则表达式

假设我有那些变种:

a = "hello" 
b = "hello-SP" 
c = "not_hello" 
  1. 任何部分匹配
    我想接受任何字符串里面有变量a,所以bc会匹配。

  2. 带图案匹配
    我想匹配了a内的字符串,然后'-',所以b将匹配,c没有。

我有问题,因为我一直使用的语法/expression/定义的正则表达式,所以如何动态地对Ruby的定义正则表达式?

回答

6

您可以使用相同的语法的正则表达式使用变量,所以:

reg1 = /#{a}/ 

会匹配任何包含a变量的值(当时的表达是创建!)和

reg2 = /#{a}-/ 

会做同样的事,再加上一个连字符,所以hello-在你的例子中。

编辑:韦恩·康拉德指出,如果a包含“将在正则表达式特殊含义的任何字符,”你需要躲避他们的。例如:

a = ".com" 
b = Regexp.new(Regexp.escape(a)) 
"blah.com" =~ b 
+2

另一种选择是使用Regexp.new,即'REG2 = Regexp.new( “#{A} - ”)'。 – 2010-04-28 18:11:19

+0

@格雷姆坎贝尔,是的,但这是更多的字母:) – 2010-04-28 18:56:54

+1

如果'a'可能有任何正则表达式元字符(周期,明星等),然后将其包装在'Regexp.escape'的调用中。 – 2010-04-29 13:51:06

0

晚发表评论,但我没能找到我一直在寻找答案,提到上面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"