регулярен израз множество вътрешни съвпадения в по-широк контекст

Опитвам се да намеря множество съвпадения във фраза с регулярни изрази

Съвпадение на множество измерения в тази фраза, резултатите са прости: работеща проба тук

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

Очаквам $out[2] да съдържа множество стойности, същите като $out[1] в първия пример

Какво ми липсва тук? Възможно ли е да го направя с регулярни изрази, обзалагам се, че може да е възможно.


person JuanNavarro    schedule 28.08.2012    source източник


Отговори (1)


Това е така, защото когато бъде намерено само едно съвпадение, но група за улавяне е намерена няколко пъти, получавате само последното.

Възможно решение би било да извлечете is от елемента <div>, след което да използвате първия Regex, който имате.

person Madara's Ghost    schedule 28.08.2012