2013-03-27 75 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"