pre" /> pre">

preg_match_all 只匹配一个

小星 编程 65

我正在尝试获取点后的值,我想获取所有这些值(每个作为它们自己的键/值)。

下面是我正在运行的:

$string = "div.cat.dog#mouse";
preg_match_all("/.(.+?)(.|#|$)/", $string, $matches);

当我转储 $matches 时,我得到了这个:

Array
(
    [0] => Array
        (
            [0] => .cat.
        )

    [1] => Array
        (
            [0] => cat
        )

    [2] => Array
        (
            [0] => .
        )

)

项目 [1] 所在的位置,它只返回 1 个值。我期望它返回(对于本例)2 个项目 catdog。为什么 dog 没有被 preg_match_all 选中?

回复

共1条回复 我来回复
  • 编程小能手
    编程小能手
    来自于宇宙以外的编程小能手~
    评论

    使用前瞻:

    .(.+?)(?=.|#|$)
    

    RegEx Demo

    您的正则表达式中的问题是您在 LHS 上匹配 DOT,在匹配的 RHS 上匹配 DOT 或 HASH 或输入结尾。匹配后,内部指针向前移动,不留下要为下一个单词匹配的 DOT。

    (?=.|#|$) 是一个积极的前瞻,它不匹配这些字符,但只是向前看,所以指针保留在 cat 而不是cat..

    之后的点

    2025-04-13 15:07:02 1条评论