rubyで特殊文字を正規表現でバックスラッシュ置換する

rubyで特殊文字列, (, ), [, ], {, }, ., ?, +, *, . を正規表現でバックスラッシュ置換をするメモ。

たとえば、特殊文字を正規表現マッチさせる場合
[ruby]
str = ‘?’
‘hogemoge?’ =~ /#{str}/

RegexpError: target of repeat operator is not specified: /?/

str = ‘)’
‘hogemoge)’ =~ /#{str}/

RegexpError: unmatched close parenthesis: /)/

[/ruby]

という具合にエラーになる。

[ruby]
str = ‘?’
str = str.gsub(/\|?|*|(|)|{|}|[|]|+|./) { |word| "\#{word}" }
‘hogemoge?’ =~ /#{str}/

=> 8

str = ‘)’
str = str.gsub(/\|?|*|(|)|{|}|[|]|+|./) { |word| "\#{word}" }
‘hogemoge)’ =~ /#{str}/

=> 8

[/ruby]

で解決した。

Comments