PHP регулярное выражение для возврата <option>значений - PullRequest
1 голос
/ 07 марта 2012

Просто интересно, можете ли вы помочь мне с небольшой задачей, которую я пытаюсь выполнить в php.

У меня есть текст, который выглядит примерно так в файле:

    (random html)
    ...
    <OPTION VALUE="195" SELECTED>Physical Chem  
    <OPTION VALUE="239">Physical Chem Lab II  
    <OPTION VALUE="555">Physical Chem for Engineers            
    ...
    (random html)

Я хочу вернуть значение # значения параметра, игнорируя все остальное.Например, в приведенном выше случае я хотел бы вернуть 195, 239 и 555, ничего другого, как «Option Value =».

У меня проблемы с выполнением этого в PHP.Пока у меня есть это:

preg_match("/OPTION VALUE=\"([0-9]*)/", $data, $matches);
        print_r($matches);  

С возвращаемым значением этого:

Array ([0] => OPTION VALUE = "195 [1] => 195) Array ([0] => OPTION VALUE = "195 [1] => 195)

Как я могу вернуть все #?

Я новичок в сопоставлении с образцом, и уроки, которые я прочитал, мало чем помогли, так что спасибо огромное

Ответы [ 4 ]

3 голосов
/ 07 марта 2012

preg_match вернет массив, содержащий только первое совпадение.Первый индекс массива вернет соответствие для полного регулярного выражения, второй - для группы захвата в скобках, попробуйте следующее, чтобы получить представление о том, как это работает:

preg_match("/(OPTION) VALUE=\"([0-9]*)/", $data, $matches);
    print_r($matches);

Вы будетесмотрите, что он выводит следующее:

Array
(
    [0] => OPTION VALUE="195
    [1] => OPTION
    [2] => 195
)

Массив [0] содержит данные полного соответствия, массив [1] содержит данные из первой группы захвата (OPTION), а массив [2] содержит данные извторая группа захвата ([0-9] *).

Чтобы сопоставить более одного вхождения, вам нужно использовать функцию preg_match_all.Если мы применим это к вашему исходному коду следующим образом:

preg_match_all("/OPTION VALUE=\"([0-9]*)/", $data, $matches);
    print_r($matches);

Мы получим:

Array
(
    [0] => Array
        (
            [0] => OPTION VALUE="195
            [1] => OPTION VALUE="239
            [2] => OPTION VALUE="555
        )

    [1] => Array
        (
            [0] => 195
            [1] => 239
            [2] => 555
        )

)

Надеюсь, это прояснит ситуацию!

2 голосов
/ 07 марта 2012

Я думаю, вы сделали все правильно. PHP возвращает полное совпадение в [0], а затем захваченные группы (круглые скобки) как остальные.

Проверьте это: http://xrg.es/#15m7krv

1 голос
/ 07 марта 2012

Попробуйте использовать preg_match_all()

http://php.net/manual/en/function.preg-match-all.php

1 голос
/ 07 марта 2012

Попробуйте:

preg_match_all('/OPTION VALUE=\"([0-9])+\"/', $data, $matches);

Редактировать

Неправильно понял ваш вопрос.Изменено на preg_match_all()

...