这有效:
str = "California (LA) rocks"
match_string = "rocks"
str.match(match_string) # => #<MatchData "rocks">
为什么这不起作用?
match_string = "(LA) rocks"
str.match(match_string) # => nil
答案 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">