如何在正则表达式中指定匹配项,但仅捕获部分匹配项?

时间:2013-10-03 19:17:31

标签: ruby regex

我想匹配任何abc,只要它不跟随x

我倾向于使用正则表达式/[^x]abc/,但如果我写dabc它匹配dabc,我希望它只匹配abc部分。

我如何使用[^x]之类的内容来限定正则表达式的开头而不计算我的匹配?

3 个答案:

答案 0 :(得分:1)

使用否定后瞻

您可以使用负向lookbehind,然后通过特殊变量$&访问最后一个匹配。例如:

domatch = 'foo abc'
nomatch = 'xabc'
pattern = /(?<!x)abc/

domatch.match pattern
$&
#=> "abc"

nomatch.match pattern
$&
#=> nil

有关详细信息,请参阅Regexp class

答案 1 :(得分:0)

添加()将创建一个可以引用的匹配组:

a = 'dabc'
p a.match(/[^x](abc)/)[1]

=> "abc"

答案 2 :(得分:0)

使用方括号,然后作为第二个参数指定子组,在这种情况下w只有一个,所以1将获得子组。

my_string = 'dabc'
my_string[/[^x](abc)/, 1] # => 'abc'