Ruby量词

示例

量词允许指定重复字符串的计数。

  • 零或一:

    /a?/
  • 零个或多个:

    /a*/
  • 一个或多个:

    /a+/
  • 确切的数字:

    /a{2,4}/ # Two, three or four
    /a{2,}/  # Two or more
    /a{,4}/  # Less than four (including zero)

默认情况下,量词是贪婪的,这意味着它们在进行匹配时会尽可能多地使用字符。通常这是不明显的:

/(?<site>.*) Stack Exchange/ =~ 'Motor Vehicle Maintenance & Repair Stack Exchange'

命名的捕获组site将按预期设置为“机动车维护与修理”。但是,如果“ Stack Exchange”是字符串的可选部分(因为它可能是“ Stack Overflow”),那么幼稚的解决方案将无法按预期工作:

/(?<site>.*)( Stack Exchange)?/

此版本仍将匹配,但命名的捕获将包括“ Stack Exchange”,因为*贪婪地吃掉了这些字符。解决方案是添加另一个问号以使*懒惰:

/(?<site>.*?)( Stack Exchange)?/

附加?到任何量词都会使其变得懒惰。