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