abc
只要不跟随,我想匹配任何x
。
我倾向于使用正则表达式/[^x]abc/
,但是如果我写dabc
它匹配dabc
,而我希望它只匹配abc
部分。
我怎样才能使用类似的东西[^x]
来限定正则表达式的开头而不计入我的匹配?
您可以使用否定的lookbehind,然后通过特殊变量访问最后一个匹配项$&
。例如:
domatch = 'foo abc'
nomatch = 'xabc'
pattern = /(?<!x)abc/
domatch.match pattern
$&
#=> "abc"
nomatch.match pattern
$&
#=> nil
有关详细信息,请参阅Regexp 类。
使用方括号,然后作为第二个参数指定子组,在这种情况下 w 只有一个,所以 1 将获得子组。
my_string = 'dabc'
my_string[/[^x](abc)/, 1] # => 'abc'
添加 () 将创建一个您可以引用的匹配组:
a = 'dabc'
p a.match(/[^x](abc)/)[1]
=> "abc"