регулярное выражение множественные внутренние совпадения в более широком контексте

Я пытаюсь найти несколько совпадений во фразе с помощью регулярных выражений

Сопоставление нескольких параметров в этой фразе дает простой результат: рабочий образец здесь

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


Это связано с тем, что если найдено только одно совпадение, но группа захвата найдена несколько раз, вы получите только последнее совпадение.

Возможным решением было бы извлечь его из элемента <div>, а затем использовать первое регулярное выражение, которое у вас было.

person Madara's Ghost    schedule 28.08.2012