Здравствуйте. Т.к. общей темы с вопросами не нашел, решил создать отдельную тему Сейчас понемногу пытаюсь вникнуть в PHP, читая книгу Котерова. В ней один из разделов как раз о PCRE Есть два примера из книги с кодом PHP и с рег. выражениями Спойлер: ex12.php, стр 391 PHP: <?php ## использование PREG_OFFSET_CAPTURE $st = '<b>жирный текст</b>'; $re = '|<(\w+).*?>(.*?)</\1>|s'; preg_match($re, $st, $p, PREG_OFFSET_CAPTURE); echo "<pre>"; print_r($p); echo "</pre>"; ?> Или Спойлер: ex06.php, стр. 387 PHP: <?php ## Обратные ссылки $str = "Hello, this <b>word</b> is bold!"; $re = '|<(\w+) [^>]* > (.*?) </\1>|xs'; preg_match($re, $str, $matches) or die("Нет тегов."); echo htmlspecialchars("'$matches[2]' обрамлено тегом '$matches[1]'"); ?> Так вот, зачем в первом примере присутствует .*? (после (\w+) ) если по сути его удаление не влияет на результат программы? Тот же вопрос и ко второму примеру, в отношении [^>]* - без него программа так же работает.. Спасибо.
Спойлеры не раскрывал, но в общем виде скажу: 1. Регулярка "работающая и без этого" может работать на одних исходных данных и не работать на других, хотя другие данные тоже будут валидными. Я думаю Котеров учитывал частные случаи, а ты - нет. Поэтому просто найди что эти конкретные выражения означают. Мне помогает такая строка поиска "regex cheat sheet" 2. Не стоит полаться на регулярки в парсинге html. Это все авторитеты признают. Найдутся такие частные случаи, которые в браузере отрисуются нормально, а скрипт с регуляркой умучат до переполнения стека. Надёжный разбор возможен через библиотеки Dom и xml.
Спойлер: >cheat sheet да ти чиитеер! p.s. прости, я еще не определился как тут оффтоп скрывать За ссылку и совет спасибо) К библиотекам Dom и Xml я, конечно еще не дошел, но как встанет вопрос - приятно будет знать что где-то (тоесть здесь) уже есть ответ на этот вопрос