2013-03-27 81 views
1

我想知道如何才能匹配一个模式,只要它不以特定字符开头。我想匹配“foo”,但我不想匹配“afoo”。我需要什么样的正则表达式?我似乎无法找到合适的人。也许是主播?Ruby正则表达式匹配文本,如果它不以字符开头

比如我想改变

foo foo afoo foo 

bar bar afoo bar 

感谢。

尽管下面的答案对我的例子来说是正确的,那么如果它是/ foo而不是afoo呢?这似乎没有相同的表现?

回答

3
str = "foo foo afoo foo" 

str.gsub(/\bfoo/, "bar") #=> "bar bar afoo bar" 
+0

如果foo在它前面有一个而不是一个?因为这似乎不工作? – zProgrammer 2013-03-27 17:52:38

+0

然后按照@mu的建议: 'str.gsub(/(?<!\ /)foo /,'bar')' – AGS 2013-03-27 18:15:35

4

听起来就像你在寻找负面的背后。如果你说(?<!expr1)expr2那么它将匹配任何expr2匹配,只要它没有立即在expr1之间匹配。例如:

>> 'foo foo afoo foo'.gsub(/(?<!a)foo/, 'bar') 
=> "bar bar afoo bar"