0

我想用正则表达式在一个短语中找到多个巧合

在这个短语中匹配多个维度,结果很简单: 工作示例在这里

<?php
    preg_match_all("/(\d+\.\d)(x|cm)/", "120.0x140.0x215.0cm", $out);
    print_r($out);
?>

[0]=> array
    [0]=>120.0x
    [1]=>140.0x
    [2]=>215.0cm
[1]=> array
    [0]=>120.0
    [1]=>140.0
    [2]=>215.0
[2]=> array
    [0]=>x
    [1]=>x
    [2]=>cm

我将使用的是$out[1]数组

当我尝试将此模式与上下文隔离时,问题就出现了,它只匹配最后一个值:Working example here

<?php
    preg_match_all("/<div>Dimensions: ((\d+\.\d)(x|cm))+<\/div>/", "<div>Dimensions: 120.0x140.0x215.0cm</div>", $out);
    print_r($out);
?>

[0]=> array
    [0]=><div>Dimensions: 120.0x140.0x215.0cm</div>
[1]=> array
    [0]=>215.0cm
[2]=> array
    [0]=>215.0
[3]=> array
    [0]=>cm

$out[2]希望包含多个值,与$out[1]第一个示例相同

我在这里缺少什么?是否可以使用正则表达式来做到这一点,我敢打赌这可能是可能的。

4

1 回答 1

0

这是因为当只找到一个匹配项,但多次找到一个捕获组时,您只会得到最后一个。

一种可能的解决方案是从<div>元素中提取,然后使用您拥有的第一个正则表达式。

于 2012-08-28T19:32:22.233 回答