如果我使用Ruby正则表达式 - gsub存储它匹配的内容吗?
.gsub(/matchthisregex/,"replace_with_this")
做GSUB存储它所用正则表达式匹配的地方?我想使用它在我的替换字符串中匹配的内容。例如像
"replace_with_" + matchedregexstring + "this"
在我上面的例子,其中matchedregexstring会从GSUB存储的比赛?对不起,如果这是令人困惑的,我不知道该怎么说。
如果我使用Ruby正则表达式 - gsub存储它匹配的内容吗?
.gsub(/matchthisregex/,"replace_with_this")
做GSUB存储它所用正则表达式匹配的地方?我想使用它在我的替换字符串中匹配的内容。例如像
"replace_with_" + matchedregexstring + "this"
在我上面的例子,其中matchedregexstring会从GSUB存储的比赛?对不起,如果这是令人困惑的,我不知道该怎么说。
如果替换是
String
它将被替换为匹配的文本。它可能包含对\d
形式的模式捕获组的反引用,其中d是组号,或\k<n>
,其中n是组名。如果它是一个双引号字符串,则两个反引用前都必须加上一个额外的反斜杠。但是,在替换内,特殊匹配变量(如&$
)不会引用当前匹配。
[...]
在块形式中,当前匹配字符串传递作为参数,和变量如$1
,$2
,$`,$&
,并$'
将被适当地设定。该块返回的值将被替换为每次调用的匹配。
如果你不关心捕获组(即东西像正则表达式(expr)
),那么你可以使用块形式和$&
:如果你有捕捉组,那么你可以
>> 'where is pancakes house?'.gsub(/is/) { "-#{$&}-" }
=> "where -is- pancakes house?"
在块
>> 'where is pancakes house?'.gsub(/(is)/, '-\1-')
=> "where -is- pancakes house?"
$n
或:在替换字符串使用\n
>> 'where is pancakes house?'.gsub(/(is)/) { "-#{$1}-" }
=> "where -is- pancakes house?"
我发现here是GSUB的比赛实际上可以通过Regexp.last_match
变量(类MatchData)这样的访问:
my_string.gsub(my_regexp){ Regexp.last_match.inspect }
为了给出一个更实际的例子,如果你想记录所有的比赛,这可以如下使用:
"Hello world".gsub(/(\w+)/) { Regexp.last_match.captures.each{ |match| Rails.logger.info "FOUND: #{match}"} }
#Rails log:
FOUND: Hello
FOUND: world
在特定情况下,可以做这样的事情:
mystring.gsub(/(matchthisregex)/){ mystring = "replace_with_#{Regexp.last_match[0].to_s}this"}
对于所有的ruby版本:简单的方法来获得匹配的字符串。
.gsub(/matched_sym/) {|sym| "-#{sym}-"}
啊哈! - 所以文档中出现的额外'\'只是来自Rdoc的人工制品。我一直在摸索着想弄明白他们的意思。 – matt 2013-04-05 01:46:31
@matt:你的意思是额外的反斜杠,对吧? #*&#$ Markdown,请参阅我的$ -backtick变量以获得更多乐趣:)是的,如果您使用双引号,则需要说'\\ 1',但如果您使用单引号我总是这样做,除非我需要插值)。 – 2013-04-05 01:49:47
是的,'''''''不是''。我没有注意到。我认为评论有时候可以做预览。 – matt 2013-04-05 01:54:37