0

すべての正規表現固有の文字を適切にエスケープして、文字列を正規表現文字列に変換するにはどうすればよいですか? 補間を使用して正規表現文字列を作成し、ユーザーがコードに触れることなく (または正規表現を知っていることを期待して) 正規表現をカスタマイズできるようにしています。

custom_text = "Hello"    
my_regex = /#{custom_text}:\s*(\d+)/i

私のコードがそれを使用すると、次の正規表現になります

/Hello:\s*(\d+)/i

これにより、ユーザーは、正規表現がどこで使用されているか、どのように使用されているか、または何かを変更した場合にスクリプトが壊れるかどうかを心配することなく、言語のローカライズを提供できるようになります。

ただし、ピリオドやクエスチョン マークなどを含めたい場合は、Hello?まずそれらをエスケープする必要があります。

4

1 に答える 1

5

使用Regexp.escape:

my_regex = /#{Regexp.escape(custom_text)}:\s*(\d+)/i

例えば:

>> puts /#{Regexp.escape('Hello?')}/.inspect
/Hello\?/
于 2012-08-19T04:07:47.237 に答える