将String转换为Regex字符串

如何将字符串转换为正则表达式字符串,正确转义所有正则表达式特定字符? 我正在使用插值来构建正则表达式字符串,以允许用户自定义正则表达式而无需触摸代码(或期望他们知道正则表达式)

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

当我的代码使用它时,会产生以下正则表达式

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

这允许用户提供语言本地化,而不必担心弄清楚我的正则表达式的使用位置,使用方式,或者如果他们改变了某些内容,他们是否会破坏脚本。

但是,如果他们想要包括诸如Hello?这样的句点或问号之类的东西Hello? ,我可能需要先逃避他们。

使用Regexp.escape

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

例如:

 >> puts /#{Regexp.escape('Hello?')}/.inspect /Hello\?/