0

これは、「数学記号を含むこの正規表現の何が問題になっていますか? (Ruby/Rails) 」のバリエーションです。

scanこれに続く agsubがプラス記号 ( ) で機能しない理由がわかりません+。パターンにアスタリスク ( *) やキャレット ( ^) などの他の正規表現特殊文字が含まれている場合にも失敗します。

~ > irb
>> text = %(test √x+1 √x-1 √x×1 √/1)
=> "test √x+1 √x-1 √x×1 √/1"
>> radicals = text.scan(/√[^\s]*/)
=> ["√x+1", "√x-1", "√x×1", "√/1"]
>> radicals.each do |radical|
?>   text = text.gsub(/#{radical}/, 'hello')
>> end
=> ["√x+1", "√x-1", "√x×1", "√/1"]
>> text
=> "test √x+1 hello hello hello"

5 行目でわかるようにscan、プラス記号 ( ) で一致するパターンが見つかりますが、各結果+に対して を実行しようとするgsubと、プラス記号のパターンは無視されます。ここで何が起こっているかについてのアイデアはありますか?

4

1 に答える 1

3

スタイルを使用して文字列を正規表現に置き換えると/#{string}/、特殊文字 ( など+) はエスケープされません。私はあなたが使いたいと思っています:

radicals.each do |radical|
    text = text.gsub(/#{Regexp.escape(radical)}/, 'hello')
end

お役に立てれば!

于 2012-08-23T22:23:55.757 に答える