如果字符串包含括号后的文本,则字符串不匹配

时间:2017-08-29 01:58:30

标签: ruby regex string

这有效:

str = "California (LA) rocks"
match_string = "rocks"
str.match(match_string) # => #<MatchData "rocks">

为什么这不起作用?

match_string = "(LA) rocks"
str.match(match_string) # => nil

2 个答案:

答案 0 :(得分:1)

您必须转义match的括号才能工作,否则它们将被解释为正则表达式模式的一部分(即作为捕获组),而不是字符串的一部分匹配。

要转义括号,您可以使用\

match_string = '\(LA\) rocks'
str.match(match_string)
#=> #<MatchData "(LA) rocks">

请注意使用单引号')而不是双引号");如果您想使用双引号,则需要使用双\

match_string = "\\(LA\\) rocks"

答案 1 :(得分:1)

因为match的参数被转换为正则表达式。特别是,"(LA) rocks"中的括号被解释为元字符,而不是字面括号。事实上,以下匹配:

"California LA rocks".match("(LA) rocks")
# => #<MatchData "LA rocks" 1:"LA">