使用Regexp部分匹配Ruby字符串的方法

时间:2010-04-28 17:09:53

标签: ruby regex string

我正在研究两个案例:

假设我有那些var:

a = "hello"
b = "hello-SP"
c = "not_hello"
  1. 任何部分匹配
    我想接受内部包含变量a的任何字符串,因此bc会匹配。

  2. 图案匹配
    我希望匹配一个内嵌a的字符串,然后匹配'-',以便b匹配,c不匹配。

  3. 我遇到问题,因为我总是使用语法/expression/来定义Regexp,那么如何在Ruby上动态定义RegExp?

2 个答案:

答案 0 :(得分:6)

您可以使用相同的语法在正则表达式中使用变量,因此:

  reg1 = /#{a}/

将匹配包含a变量值的任何内容(在创建表达式时!)和

  reg2 = /#{a}-/

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

编辑正如Wayne Conrad指出的那样,如果a包含“任何在正则表达式中具有特殊含义的字符”,则需要将它们转义。例如:

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

答案 1 :(得分:0)

迟到发表评论,但我找不到我要找的东西。上面提到的答案对我没有帮助。希望它可以帮助那些想要快速修复的红宝石新手。

Ruby代码:

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"