【发布时间】:2014-10-08 18:37:15
【问题描述】:
您可以使用字符类来匹配一系列字符,而不是像这样的完全匹配:
> str = "Daniel"
> match = /A-Za-z/.match str
=> nil
> match = /[A-Za-z]/.match str
=> #<MatchData "D">
第一个示例返回 nil,因为“Daniel”与“A-Za-z”不完全匹配。但是第二个示例使用了一个字符类,其中“-”在匹配范围时具有特殊含义。因此,正则表达式引擎检查字符串并在第一次出现匹配时停止,在本例中为 'D'。
由于 + 修饰符匹配一个或多个出现,我可以这样返回完整的字符串:
> match = /[A-Za-z]+/.match str
=> #<MatchData "Daniel">
match[0] 将提供完整的字符串“Daniel”,因为正则表达式匹配字母表中基本上每个字母的一个或多个出现。
有了这些知识,引擎也应该能够匹配字符串中的所有 a。但它没有:
> str = "Daaniaal"
> match = /[a]+/.match str
=> #<MatchData "aa">
它在匹配前两个 a 后似乎停止了,即使我使用 + 修饰符来匹配一个或多个出现。会期待像“aaaa”这样的结果。这怎么行不通?
【问题讨论】: