Ruby Match - 使用特殊字符转义字符串

时间:2014-01-14 16:15:02

标签: ruby regex regex-lookarounds

我编写了以下代码来匹配我的属性文件中的服务名称: -

service = properties.match(/^com\.google\.([#{serviceName}]+)\.public$/)

当我提供任何serviceName时,此代码可以正常工作,但如果serviceName之间有-则会失败

例如 - common-api

错误:

empty range in char class: /^com\.google\.([common-api]+)\.public$/ (SyntaxError)

任何想法如何从正则表达式评估中逃脱整个字符串?

1 个答案:

答案 0 :(得分:4)

您可能需要Regexp.escape

service = properties.match(/^com\.google\.(#{Regexp.escape(serviceName)})\.public$/)

此外,您已将serviceName[...]+包含在一起,这意味着[...]中此字符列表中的多个字符。

E.g。此正则表达式[commonapi]+接受moconaipimdconn,或者实际上包含您实际想要捕获的服务名称中某些字符的任何长度字符串。