我希望这个例子能匹配两个字符<
和>
:
a = "<1acf457f477b41d4a363e89a1d0a6e57@Open-Xchange>"
a.match /[<>]/
# => #<MatchData "<">
它只匹配第一个字符。为什么?
我希望这个例子能匹配两个字符<
和>
:
a = "<1acf457f477b41d4a363e89a1d0a6e57@Open-Xchange>"
a.match /[<>]/
# => #<MatchData "<">
它只匹配第一个字符。为什么?
#match
只返回第一个匹配项,正如您所看到的 MatchData, #scan
将返回所有匹配项。
>> a="<1acf457f477b41d4a363e89a1d0a6e57@Open-Xchange>"
=> "<1acf457f477b41d4a363e89a1d0a6e57@Open-Xchange>"
>> a.scan /[<>]/
=> ["<", ">"]
你误解了你的表达方式。/[<>]/
方法:
匹配字符类中的单个字符,可以是
<
或>
。
Ruby 正确地为您提供了您在模式中所要求的内容。
如果您期望两个字符之间的整个字符串,则需要不同的模式。例如:
"<1acf457f477b41d4a363e89a1d0a6e57@Open-Xchange>".match /<.*?>/
#=> #<MatchData "<1acf457f477b41d4a363e89a1d0a6e57@Open-Xchange>">
或者,如果您只想匹配字符串<
或>
字符串中的所有实例,则应将String#scan与字符类或替代一起使用。在这种特殊情况下,结果将是相同的。例如:
"<1acf457f477b41d4a363e89a1d0a6e57@Open-Xchange>".scan /<|>/
#=> ["<", ">"]
"<1acf457f477b41d4a363e89a1d0a6e57@Open-Xchange>".scan /[<>]/
#=> ["<", ">"]