За последние 24 часа нас посетили 21077 программистов и 1108 роботов. Сейчас ищут 455 программистов ...

Вопрос от учащегося

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

  1. Spycrab

    Spycrab Новичок

    С нами с:
    15 апр 2019
    Сообщения:
    2
    Симпатии:
    0
    Здравствуйте.
    Т.к. общей темы с вопросами не нашел, решил создать отдельную тему
    Сейчас понемногу пытаюсь вникнуть в PHP, читая книгу Котерова. В ней один из разделов как раз о PCRE
    Есть два примера из книги с кодом PHP и с рег. выражениями
    PHP:
    1. <?php ## использование PREG_OFFSET_CAPTURE
    2. $st = '<b>жирный текст</b>';
    3. $re = '|<(\w+).*?>(.*?)</\1>|s';
    4. preg_match($re, $st, $p, PREG_OFFSET_CAPTURE);
    5. echo "<pre>"; print_r($p); echo "</pre>";
    6. ?>

    Или

    PHP:
    1. <?php ## Обратные ссылки
    2. $str = "Hello, this <b>word</b> is bold!";
    3. $re = '|<(\w+) [^>]* > (.*?) </\1>|xs';
    4. preg_match($re, $str, $matches) or die("Нет тегов.");
    5. echo htmlspecialchars("'$matches[2]' обрамлено тегом '$matches[1]'");
    6. ?>

    Так вот, зачем в первом примере присутствует .*? (после (\w+) ) если по сути его удаление не влияет на результат программы?
    Тот же вопрос и ко второму примеру, в отношении [^>]* - без него программа так же работает..

    Спасибо.
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.068
    Симпатии:
    1.231
    Адрес:
    там-сям
    Спойлеры не раскрывал, но в общем виде скажу:

    1. Регулярка "работающая и без этого" может работать на одних исходных данных и не работать на других, хотя другие данные тоже будут валидными. Я думаю Котеров учитывал частные случаи, а ты - нет. Поэтому просто найди что эти конкретные выражения означают.
    Мне помогает такая строка поиска "regex cheat sheet" :)

    2. Не стоит полаться на регулярки в парсинге html. Это все авторитеты признают. Найдутся такие частные случаи, которые в браузере отрисуются нормально, а скрипт с регуляркой умучат до переполнения стека.
    Надёжный разбор возможен через библиотеки Dom и xml.
     
    Valick нравится это.
  3. Spycrab

    Spycrab Новичок

    С нами с:
    15 апр 2019
    Сообщения:
    2
    Симпатии:
    0
    да ти чиитеер!
    p.s. прости, я еще не определился как тут оффтоп скрывать
    За ссылку и совет спасибо)
    К библиотекам Dom и Xml я, конечно еще не дошел, но как встанет вопрос - приятно будет знать что где-то (тоесть здесь) уже есть ответ на этот вопрос