这个正则表达式有什么问题?(工作在regex101.com)


What wrong with this regex? (works on regex101.com)

你们谁能发现我的错误-我有一个正则表达式工作得很好,当我在线测试它-见https://www.regex101.com/r/tG2fI5/2

但是在我下面的代码中不起作用。当我打印$match数组时,它什么也没输出…

$output =   '<h2>Køretøj</h2>                       
            <div class="pairName">Mærke</div>
            <div class="pairValue">PEUGEOT</div>
            <div class="pairName">Model</div>
            <div class="pairValue">607</div>
            <div class="pairName">Stelnummer</div>
            <div class="pairValue">VFDDD4TZE92104255</div>
            <div class="pairName">Seneste reg.nr.</div>
            <div class="pairValue">YE45522</div>';
$pattern = '/(?<=pairValue">)(.*?)(?=<)/g'; 
$match = array();
preg_match_all($pattern, $output, $match);
print_r($match);

看起来preg_match_all()会自动执行一个全局表达式匹配。

见http://php.net/manual/en/function.preg-match-all.php。

所以改变

$pattern = '/(?<=pairValue">)(.*?)(?=<)/g';

$pattern = '/(?<=pairValue">)(.*?)(?=<)/';

我在PHP 5.5中测试了它,它输出如下:

Array
(
    [0] => Array
        (
            [0] => PEUGEOT
            [1] => 607
            [2] => VFDDD4TZE92104255
            [3] => YE45522
        )
    [1] => Array
        (
            [0] => PEUGEOT
            [1] => 607
            [2] => VFDDD4TZE92104255
            [3] => YE45522
        )
)

数组中的第一个元素保存所有匹配项。第二个保存"是由第一个带括号的子模式匹配的字符串数组"(也是来自上面的链接)。

因此,如果适合您的需要,您也可以将正则表达式更改为/(?<=pairValue">).*(?=<)/

你也可以试试这个:

<div[^>]*class='"pairValue'"[^>]*>([^<]*)<'/div>