preg_match_all只匹配一个

Get*_*awn 2 php regex preg-match-all

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

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

$string = "div.cat.dog#mouse";
preg_match_all("/\.(.+?)(\.|#|$)/", $string, $matches);
Run Code Online (Sandbox Code Playgroud)

当我做转储$matches我得到这个:

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

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

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

)
Run Code Online (Sandbox Code Playgroud)

在item的[1]位置,它只返回1个值.我期待的是它返回(对于这种情况)2项catdog.怎么dog没被捡到preg_match_all

anu*_*ava 5

使用前瞻:

\.(.+?)(?=\.|#|$)
Run Code Online (Sandbox Code Playgroud)

RegEx演示

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

(?=\.|#|$)是一个积极的前瞻,与这些角色不匹配,但只是向前看,所以指针保持在cat后面而不是DOT cat..