Использование \K в регулярных выражениях. Игнорирование начальной части совпадения.

Регулярные выражения не самая простая область программирования, а тут ещё оказывается, что их описание (в документации по PHP) далеко не полное, например в нем нет описание весьма полезной последовательности \K, которая позволяет отбросить начальную часть совпадения, например, шаблону

foo\Kbar

будет соответствовать строка foobar, но в качестве результата будет возвращена лишь подстрока bar

Как я уже отметил, эта информация отсутствует в документации по php, но ее можно отыскать PCRE (Perl-compatible regular expressions) man pages (с оглядкой на то, что php поддерживает спецификацию не в полной мере)

А теперь от теории перейдем к практике, и посмотрим, где его можно использовать. Не так давно на одном из форумов я встретил такую задачу: Как вырезать из html страницы последний абзац отмеченный тегами <p> </p>. После некоторых раздумий (и пары неверных решений я предложил такой вариант)

  1. $text = preg_replace('#(.+)<p>(.+)</p>(.*)$#sim', '\\1\\3', $text);
Но предложенный другим пользователем вариант понравился мне куда больше, а кроме того помог узнать что-то новое

  1. $text = preg_replace('{.*\K<p>.*?</p>}is', '', $text);

Возможности последовательности \K на этом не исчерпываются и почитать о ее использовании и преимуществах можно в статье PCRE Regex Spotlight: \K

Читайте в блоге

Замена с помощью регулярных выражений. Модификатор e
Раскрашиваем код на сайте. GeShi - PHP Code Colorer
Ссылки. TimePicker. javascript на сервере. DOM парсер
PHP. Сохранение массива в файл
JavaScript и MFC. Интеграция Property Tree в MFC приложение.

Метки: regexp php ссылки

Комментарии:

Владимир Рыбаков @ 19.11.2009 15:59


http://www.nulled.ws/showthread.php?t=156560

Войдите на сайт, чтобы оставить комментарий