Ruby正则表达式 – gsub存储匹配的内容吗?
如果我使用
.gsub(/matchthisregex/,"replace_with_this")
gsub存储它与正则表达式匹配的地方吗? 我想在替换字符串中使用匹配的内容。 比如像
"replace_with_" + matchedregexstring + "this"
在上面的例子中,matchedregexstring将是来自gsub的存储匹配? 对不起,如果那令人困惑,我不知道怎么说。
从精细手册 :
如果replacement是一个
String
,它将替换匹配的文本。 它可能包含对格式\d
的模式捕获组的反向引用,其中d是组号,或者\k
,其中n是组名。 如果它是双引号字符串,则两个反向引用都必须以额外的反斜杠开头。 但是,在替换中 ,特殊匹配变量(例如&$
)不会引用当前匹配。
[…]
在块forms中,当前匹配字符串作为参数传入,并且将适当地设置诸如$1
,$2
,$`,$&
和$'
变量。 块返回的值将替换每次调用的匹配。
如果您不关心捕获组(即正则表达式中的(expr)
类的东西(expr)
,那么您可以使用块forms和$&
:
>> 'where is pancakes house?'.gsub(/is/) { "-#{$&}-" } => "where -is- pancakes house?"
如果您有捕获组,则可以在替换字符串中使用\n
:
>> 'where is pancakes house?'.gsub(/(is)/, '-\1-') => "where -is- pancakes house?"
块中的$n
或$n
:
>> 'where is pancakes house?'.gsub(/(is)/) { "-#{$1}-" } => "where -is- pancakes house?"
对于所有ruby版本:获取匹配字符串的简单方法。
.gsub(/matched_sym/) {|sym| "-#{sym}-"}
我在这里发现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"}