php preg_math_all匹配错误的字符串

Dan*_*boy 2 php regex preg-match-all preg-match

我有这个子模式:

<?php                                                                                                                                                                                                                                          

    $wavs = 'aaaa="" wav="d" bbbbb="" wav="gerg" ccccc="" wav="" ddddd=""';        
    preg_match_all('#(?<=wav=").+?(?=")#', $wavs, $matches);                    
    print_r($matches);                                                          
?> 
Run Code Online (Sandbox Code Playgroud)

它导致此输出:

php test.php 
Array
(
    [0] => Array
        (
            [0] => d
            [1] => gerg
            [2] => " ddddd=
        )

)
Run Code Online (Sandbox Code Playgroud)

虽然我预计只有2场比赛:

php test.php 
Array
(
    [0] => Array
        (
            [0] => d
            [1] => gerg
        )

)
Run Code Online (Sandbox Code Playgroud)

这是什么问题?为什么要捕获额外无关的字符串?

编辑:( M42响应)

preg_match_all('#(?<=wav=").*?(?=")#', $wavs, $matches);  
Run Code Online (Sandbox Code Playgroud)

仍导致不正确的匹配:

Array
(
    [0] => Array
        (
            [0] => d
            [1] => gerg
            [2] => 
            [3] => " ddddd=
        )

)
Run Code Online (Sandbox Code Playgroud)

编辑:(嗅探器)

天啊!谢谢你,先生!确切的工作!

preg_match_all('#(?<=wav=")\w+?(?=")#', $wavs, $matches);  

Array
(
    [0] => Array
        (
            [0] => d
            [1] => gerg
        )

)
Run Code Online (Sandbox Code Playgroud)

Ibr*_*jar 5

这是什么问题?为什么要捕获额外无关的字符串?

 #(?<=wav=").+?(?=")#
            ^^^
         This is the reason, it matches everything including the space and the "
Run Code Online (Sandbox Code Playgroud)

你可能想要:

#(?<wav=")\w+(?=")#
Run Code Online (Sandbox Code Playgroud)