preg_match_all只匹配一个

时间:2015-01-15 18:16:38

标签: php regex preg-match-all

我试图获得点后的值,我想得到所有这些(每个都是他们自己的键/值)。

以下是我正在运行的内容:

$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项catdogdog

为何preg_match_all未被接听?

1 个答案:

答案 0 :(得分:5)

使用前瞻:

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

RegEx Demo

你的正则表达式中的问题是你匹配LHS上的DOT和匹配RHS的DOT或HASH或输入结束。匹配后,内部指针向前移动,不会为下一个字匹配DOT。

(?=\.|#|$)是一个积极的先行者,不会匹配这些字符,但只是向前看,所以指针保留在cat而不是cat.之后的DOT。