私が使用する場合
.gsub(/matchthisregex/,"replace_with_this")
gsubは、正規表現と一致するものをどこかに保存しますか?一致するものを置換文字列で使用したいと思います。たとえば、
"replace_with_" + matchedregexstring + "this"
上記の例では、matchedregexstringはgsubからの保存された一致になりますか?それが混乱していた場合は申し訳ありませんが、私はそれを他にどのように言葉にするかわかりません。
細かいマニュアル から:
replacementが
String
の場合、一致したテキストに置き換えられます。\d
(dはグループ番号)または\k<n>
(nはグループ名)の形式のパターンのキャプチャグループへの後方参照が含まれる場合があります。二重引用符で囲まれた文字列の場合は、両方の後方参照の前に追加の円記号を付ける必要があります。ただし、replacement内では、&$
などの特別な一致変数は、現在の一致を参照しません。
[...]
ブロック形式では、現在の一致文字列がパラメーターとして渡され、$1
、$2
、$ `、$&
、$'
などの変数が適切に設定されます。ブロックによって返される値は、各呼び出しの一致に置き換えられます。
キャプチャグループ(つまり、正規表現の(expr)
など)を気にしない場合は、ブロックフォームと$&
を使用できます。
>> 'where is pancakes house?'.gsub(/is/) { "-#{$&}-" }
=> "where -is- pancakes house?"
キャプチャグループがある場合は、置換文字列で\n
を使用できます。
>> 'where is pancakes house?'.gsub(/(is)/, '-\1-')
=> "where -is- pancakes house?"
またはブロック内の$n
:
>> 'where is pancakes house?'.gsub(/(is)/) { "-#{$1}-" }
=> "where -is- pancakes house?"
すべてのRubyバージョンの場合:一致する文字列を取得する簡単な方法。
.gsub(/matched_sym/) {|sym| "-#{sym}-"}
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"}