将String转换为Regex字符串

时间:2012-08-19 03:57:51

标签: ruby regex

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

实施例

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

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

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

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

但是,如果他们想要包含诸如Hello?这样的句点或问号之类的内容,我可能需要先将它们排除。

1 个答案:

答案 0 :(得分:5)

使用Regexp.escape

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

例如:

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