2013-03-27 79 views
3

我可以使用正則表達式連接文本到其他文本嗎?正則表達式修改文本

我有一個字符串包括:

"bird dog fish" 

我想輸出:

"bird catdog fish" 

我會用gsub做到這一點?我感到困惑,因爲如果我使用gsub匹配「狗」,我將不得不用「貓」替換「貓」,而不是隻在其前面添加「貓」。我怎樣才能添加一些文字到特定的比賽?我必須使用掃描或其他?

回答

5

做替換有什麼問題?

>>> "bird dog fish".gsub(/(dog)/, 'cat\1') 
=> "bird catdog fish" 

\1是將(dog)捕獲組的引用。當然,(dog)可以是任何有效的正則表達式,所以這個例子可以很容易地用於更復雜的情況。如果需要,您可以有多個捕獲組。

>>> "bird dog fish".gsub(/(dog)(.*)(sh)/, 'cat\1\3\2') 
=> "bird catdogsh fi" 

Ruby 1.9的推出命名捕捉組

>>> "bird dog fish".gsub(/(?<mydog>dog)/, 'cat\kmydog') 
=> "bird catdog fish" 

這是紅寶石。有總是許多方法來做到這一點。更多可以在標準文檔中找到。

+0

\ 1做什麼? – zProgrammer 2013-03-27 16:45:25

+0

@Jack:這是一個被捕獲組的參考。 Regex中'dog'周圍的parens指定它應該被「捕獲」用於輸出。 – voithos 2013-03-27 16:46:32

+0

啊。你能做像2或3這樣的東西嗎?如果是這樣會做什麼? – zProgrammer 2013-03-27 16:48:28