这个正则表达式有什么问题? (适用于regex101.com)

时间:2015-10-15 14:02:53

标签: php regex

你们有没有发现我的错误 - 我有一个正则表达式,当我在线测试时效果很好 - 请参阅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);

2 个答案:

答案 0 :(得分:2)

看起来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">).*(?=<)/

答案 1 :(得分:0)

你也可以试试这个:

<div[^>]*class=\"pairValue\"[^>]*>([^<]*)<\/div>
相关问题