代码之家  ›  专栏  ›  技术社区  ›  strager

子表达式(正则表达式)的无限匹配只返回一个匹配

  •  1
  • strager  · 技术社区  · 16 年前

    我有这样一个正则表达式(非常简化):

    ^(ab)*$
    

    abababababababab
    

    当我运行它的时候 preg_match :

    preg_match('/$(ab)*$/', 'abababababababab', $matches);
    print_r($matches);
    

    我明白了:

    Array
    (
        [0] => abababababababab
        [1] => ab
    )
    

    Array
    (
        [0] => abababababababab
        [1] => ab
        [2] => ab
        [3] => ab
        [4] => ab
        [5] => ab
        [6] => ab
        [7] => ab
        [8] => ab
    }
    

    我怎样才能得到我所期望的?

    (注意,子表达式可能更复杂,例如。 ([aA][bB])

    1 回复  |  直到 16 年前
        1
  •  4
  •   Evan Fosmark    16 年前

    通过使用 preg_match_all 这样地:

    preg_match_all('/(ab)/', 'abababababababab', $matches);
    print_r($matches);
    

    记得吗 preg_match 仅提供第一个匹配项,并且 预赛 具有相同的功能,但返回所有。还要注意,现在正则表达式已经更改。如果使用星号,它可能会在第一次匹配时使用整个字符串。但是,您可以尝试以下方法 (ab)*? 让它不结芦苇。