你们谁能发现我的错误-我有一个正则表达式工作得很好,当我在线测试它-见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>