正则表达式在更广泛的上下文中包含多个内部巧合


regular expression multiple inner coincidences in a more wide context

使用正则表达式在短语中查找多个协理

在这个短语中匹配多个维度,结果很简单:此处为工作样品

<?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]阵列

当我试图将这个模式与上下文隔离时,问题就来了,它只匹配最后一个值:这里的工作示例

<?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

Im检查$out[2]以包含多个值,与第一个示例中的$out[1]相同

我这里少了什么?有可能用正则表达式做这件事吗?我敢打赌这可能。

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

一个可能的解决方案是从<div>元素中提取is,然后使用您拥有的第一个Regex。