在正则表达式中使用负面条件

时间:2011-05-30 20:34:50

标签: ruby regex gsub

是否可以在gsub表达式中使用否定匹配? 我希望替换以hello 开头的字符串,但hello Peter

开头的字符串除外
my-string.gsub(/^hello@/i, '')

我应该放什么而不是@

2 个答案:

答案 0 :(得分:7)

听起来你想要一个消极的前瞻:

>> "hello foo".gsub(/hello (?!peter)/, 'lala ') #=> "lala foo"
>> "hello peter".gsub(/hello (?!peter)/, 'lala ') #=> "hello peter"

答案 1 :(得分:2)

正如迈克尔告诉你的那样,你需要一个消极的向前看。

对于你的例子是这样的:

my_string.gsub(/^hello(?! peter)( .*|$)/i, '')

这将取代以下情况:

"hello"
"hello Mom"
"hello "
"hello Mom and Dad"

并会忽略以下内容:

"hello Peter"
"hello peter"
"hellomom"
"hello peter and tom"