Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Вопрос по регуляркам в preg_match();
Форумы портала PHP.SU » » Вопросы новичков » Вопрос по регуляркам в preg_match();

Страниц (1): [1]
 

1. valkiriy - 13 Ноября, 2013 - 11:56:31 - перейти к сообщению
Добрый день php.su,

Хочу вытащить тект заключенный между тегами <td class="postFirst"> и <td class="postRest2">
пишу седушее:
PHP:
скопировать код в буфер обмена
  1. preg_match('|(.*)<td class=\"postFirst\">(.*)<td class=\"postRest2\">|is', $html, $data)

но как я понял вырезается текст не единожды, а по первому и последнему тегу...
как решить данную проблему и чем конструкция отличается от следующей:
PHP:
скопировать код в буфер обмена
  1. preg_match('|<td class=\"postFirst\">(.*)<td class=\"postRest2\">|sei', $html, $data)
2. esterio - 13 Ноября, 2013 - 12:01:01 - перейти к сообщению
http://www.php.net/manual/ru/ref...ttern.syntax.php
3. teddy - 13 Ноября, 2013 - 14:08:02 - перейти к сообщению
valkiriy пишет:
но как я понял вырезается текст не единожды, а по первому и последнему тегу...

потому что не указываете закрывающий тег поэтому регулярка в результат запихивает все что встретит

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

PHP:
скопировать код в буфер обмена
  1. preg_match("/<td class=\"postFirst\">(.*)<\/td>.*<td class=\"postRest2\">(.*)<\/td>/is", $html, $data);
  2. print_r($data);

наверное так
4. IllusionMH - 13 Ноября, 2013 - 14:22:02 - перейти к сообщению
valkiriy, во-первых, вам нужно убрать жадность. Это делается либо добавлением флага U, либо вместо (.*) использовать (.*?).
Во-вторых, если в строке несколько вхождений, то вероятно стиоит импользовать preg_match_all

 

Powered by ExBB FM 1.0 RC1