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

Arp*_*pit 0 ruby regex regex-lookarounds

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

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

此代码工作正常,当我给任何serviceName但却未能如果serviceName有一个-在之间

例如- common-api

错误:

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

任何想法我怎么能逃脱正则表达式评估中的整个字符串?

amn*_*mnn 5

您可能想要Regexp.escape

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

此外,您已经包围了你的包容serviceName[...]+,这意味着在此字符列表中有多个角色[...]

例如,此regexp [commonapi]+接受moconaipimdconn,或实际上包含包含您实际上要捕获的服务名称中的某些字符的任何长度的字符串。