2013-03-27 78 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