背景
-
http://aaa/ccc→http://aaa/bbb/cccにしたい - しかし、元々、
http://aaa/bbb/cccのものはそのままで良い
という状況で使えるコマンドが欲しかったです。
つまり、置換はするのですが、なんでも置換するのではなく除外するパターンもあるという除外です。
コマンド
正規表現の否定的先読みを使います
例えば、playの過去系のみ置換しないのなら、
"play plays played".gsub(/play(?!ed)/, "eat")
# => "eat eats played"
というコマンドになります。
前述のurlに関しては、
"http://aaa/ccc".gsub(/http:\/\/aaa\/(?!bbb\/)/, "http://aaa/bbb/")
# =>"http://aaa/bbb/ccc"
"http://aaa/bbb/ccc".gsub(/http:\/\/aaa\/(?!bbb\/)/, "http://aaa/bbb/")
# => "http://aaa/bbb/ccc"