在正则表达式中如何转义特殊字符?

32

我有一个表单,将文本字段的内容发送到我的Rails应用程序,并且我需要生成该字符串的正则表达式。

我尝试了这样:

regex = /#{params[:text]}/

一般情况下这个方法是可行的,但如果字符串中包含括号或特殊字符,则该方法将无效。

我不希望Rails处理这些字符,它们应该自动转义。

我尝试过这样做:

/\Q#{params[:text]}\E/

但这也没有起作用。

2个回答

50

你应该使用Regexp.escape

regex = /#{Regexp.escape(params[:text])}/
# in rails models/controllers with mongoid use:
# ::Regexp.escape(params[:text]) instead. ([more info][2])

9

Regexp.escape函数转义特殊字符:

params[:text] = "[foo-bar]"
Regexp.new(Regexp.escape(params[:text]))
# => /\[foo\-bar\]/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接