如果我使用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