我想匹配任何abc
,只要它不跟随x
。
我倾向于使用正则表达式/[^x]abc/
,但如果我写dabc
它匹配dabc
,我希望它只匹配abc
部分。
我如何使用[^x]
之类的内容来限定正则表达式的开头而不计算我的匹配?
答案 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'