preg_replace: не разберусь

Тема в разделе "Регулярные выражения", создана пользователем sunyang, 3 окт 2011.

Статус темы:
Закрыта.
Модераторы: xpert13
  1. sunyang

    sunyang

    Регистр.:
    25 апр 2009
    Сообщения:
    444
    Симпатии:
    30
    пытаюсь выдернуть из option`s
    HTML:
    
    <option>100</option>
      <option>200</option>
      <option>50</option>
      <option>80</option>
      <option>90</option>
      <option>A1</option>
    
    значения (100, 200 ...)

    выражением:
    PHP:
    $html "<option>100</option>
      <option>200</option>
      <option>50</option>
      <option>80</option>
      <option>90</option>
      <option>A1</option>"

    $arr_marki preg_replace('#^(.*)<option>(.*?)</option>(.*)#is''$2',$html);  // выдергиваем все значения option

    print_r ($arr_marki);
    Выдает: A1

    Как это?)

    Почему только последнее значение?
     
  2. drawing4

    drawing4

    Регистр.:
    21 ноя 2008
    Сообщения:
    323
    Симпатии:
    37
    1. (.*) - все символы, те. оно из вашей строки вырезает все до последнего совпадения
    2. Вам нужно разбить на строки вашу строку, и обработать данные в цикле
    3. Для того чтобы легче было с регулярками рекомендую использовать прогу RegexBuddy (бесплатная), с ней намного проще с регулярками работать
     
  3. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    883
    Симпатии:
    540
    Это называется жадностью .* - захватит Максимальное количество, те например шаблон
    <option>.*</option> найдёт <option>, будет искать дальше найдёт <option>100</option> , но пойдёт дальше, ведь <option>100</option>
    <option>200</option> тоже подходит!..

    Вообще стоит задача выдернуть эти значения или же оставить их в виде списка. Если первое то
    preg_match_all('#<option>(.*?)</option>#is', $html, $option_preg);
    в $option_preg[1] будут все нужные числа
     
    sunyang нравится это.
Статус темы:
Закрыта.