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

Fab*_*ani 1 ruby regex string

我正在研究2个案例:

假设我有那些var:

a = "hello"
b = "hello-SP"
c = "not_hello"
Run Code Online (Sandbox Code Playgroud)
  1. 任何部分匹配
    我想接受具有可变任何字符串a里面,所以bc会匹配.

  2. 图案的比赛
    我想匹配了字符串a内,其次'-',这样b会匹配,c没有.

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

Dan*_*ark 6

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

  reg1 = /#{a}/
Run Code Online (Sandbox Code Playgroud)

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

  reg2 = /#{a}-/
Run Code Online (Sandbox Code Playgroud)

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

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

a = ".com"
b = Regexp.new(Regexp.escape(a))
"blah.com" =~ b
Run Code Online (Sandbox Code Playgroud)

  • 另一种选择是使用Regexp.new,即`reg2 = Regexp.new("#{a} - ")`. (2认同)