如何将字符串转换为正则表达式字符串,正确转义所有正则表达式特定字符?我使用插值来构建正则表达式字符串,以允许用户自定义正则表达式而无需触摸代码(或期望他们知道正则表达式)
实施例
custom_text = "Hello"
my_regex = /#{custom_text}:\s*(\d+)/i
当我的代码使用它时会产生以下正则表达式
/Hello:\s*(\d+)/i
这允许用户提供语言本地化,而不必担心弄清楚我的正则表达式的使用位置,使用方式,或者如果他们改变了某些内容,他们是否会破坏脚本。
但是,如果他们想要包含诸如Hello?
这样的句点或问号之类的内容,我可能需要先将它们排除。
答案 0 :(得分:5)
my_regex = /#{Regexp.escape(custom_text)}:\s*(\d+)/i
例如:
>> puts /#{Regexp.escape('Hello?')}/.inspect
/Hello\?/