\ 1做了什么?Ruby正则表达式 1对于gsub来说意味着什么
例如
"foo bar bag".gsub(/(bar)/,'car\1')
我相信这是与你如何使用括号,但我真的不知道。有人可以向我解释吗?你能做些像2的东西吗?如果是这样,那会做什么?
\ 1做了什么?Ruby正则表达式 1对于gsub来说意味着什么
例如
"foo bar bag".gsub(/(bar)/,'car\1')
我相信这是与你如何使用括号,但我真的不知道。有人可以向我解释吗?你能做些像2的东西吗?如果是这样,那会做什么?
您在搜索部分用圆括号括起来的每个项目将对应于替换部分中的数字\1
,\2
等。
在你的榜样,有那么任何地方,你把\1
是在括号内的部分,将被交换的只有一个项目由括号包围的"(bar)"
项目,你可以把在\1
多次,这是方便如果你想重复发现的项目,所以你可以合法地写car\1\1\1
和"bar"
将交换三次。
对于\2
没有用处,因为只有一个项目被圆括号包围。但是,如果您有(bar)(jar)
,那么\1
将代表"bar"
和\2
将代表"jar"
。
你甚至可以做这样的事情:
\1\2\1\2\2\1
这将成为:
barjarbarjarjarbar
这里有一个真实的例子,其中该派上用场了。比方说,你有一个名单如下:
Jones, Tom
Smith, Alan
Smith, Dave
Wilson, Bud
,你想把它改成这样:
Tom Jones
Alan Smith
Dave Smith
Bud Wilson
你可以搜索:
(.+), (.+)
,并替换为:
\2 \1
你也可以替换w第i:
\1: \2 \1
这将成为:
Jones: Tom Jones
Smith: Alan Smith
Smith: Dave Smith
Wilson: Bud Wilson
请花时间更好地设置你的答案格式。 Stack Overflow有一个很好的帮助系统(http://stackoverflow.com/editing-help),它描述了如何做到这一点。 – 2013-04-05 05:40:46
感谢您的链接,帮助。我把它清理干净了。 – 2013-04-06 16:34:14
看看我是如何通过点击编辑通知上方的“编辑”链接来对其进行格式化的。 – 2013-04-08 01:48:27
一般来说\N
被替换为在正则表达式中指定的第N个组。第一个匹配组由\1
引用,组的最大数量为9。
一些例子:
# wrap every integer into brackets
'1 2 34'.gsub(/(\d+)/, '[\1]')
# => "[1] [2] [34]"
# gsub with two groups: swap couples of integers
'<1,2> <3,4>'.gsub(/(\d+),(\d+)/, '\2,\1')
# => "<2,1> <4,3>"
# you can reference the same group more than once
'1 2 34'.gsub(/(\d+)/, '<\1,\1>')
# => "<1,1> <2,2> <34,34>"
# a slightly more complex example
'Jim Morrison'.sub(/([A-Z])[a-z]+ ([A-Z][a-z]+)/, '\2 \1.')
# => "Morrison J."
要重复基团(1)的另一时间。使用\ 1和()代表组 – Civa 2013-04-05 04:27:02