Эта тема на forum.dklab.ru


Педагог: Задачки на регулярные выражения
Чего то думал, думал,.. думал, думал,.. так и не надумал (в смысле не получилось), как это решить:

Задача №1.
ereg возвращает истину для всех страниц, кроме тех, названия которых заканчиваются на _print или _save, например (+истина, -ложь):
+ /bla.html
+ /bla_foo.html
- /bla_print.html
- /bla_save.html
- /bla_foo_print.html
- /bla_foo_save.html

Задача №2.
ereg возвращает в третьем параметре своем массив, первый элемент которого, есть первый абцац текста (по html-коду), например:
bla bla <p>Первый абзац<p>Второй абзац<p>Третий абцац<p>...
(должно вернуться 'Первый абзац')
bla bla <p>Первый <i>аб</i>зац<p>Второй абзац<p>Третий абцац<p>...
(должно вернуться 'Первый <i>аб</i>зац')

Научите люди добрые неразумного Педагога.
Дмитрий Котеров:
1.

if (!preg_match('/(_print|_save)\.[^.]+$/s', $fname)) { ... }


2.

preg_match('{ <p[^>]*> (.*?) (?: </?p | $) }six', $fname, $pockets)

Педагог:
Чувствую я, что мне в дальнейшей жизни без preg-а не обойтись. Обращаюсь к Дмитрию Котерову, не могли бы Вы написать маленькую статью на сайте типа "От ereg к preg", это у Вас так хорошо получается. А теперь к задачкам:
1. В моем конкретном случае конструкцию if (!preg_match(...)) нельзя использовать, только if (preg_match(...)), так что можно еще какой нибудь вариант решения...
2. Можно коментарий (посимвольно) к части регулярного выражения (?: </?p | $)? Не въеду, что она делает.
Дмитрий Котеров:
1. Точно не уверен, но, кажется, это можно сделать так:

if (preg_match('/(?<!_print|_save)\.[^.]+$/s', $fname)) { ... }


От ereg к preg
Если я не ошибаюсь, Вам нужно «от нуля к preg». Читайте документацию (особенно Perl), либо же купите какую-нибудь книгу по регулярным выражением.
Педагог:
купите какую-нибудь книгу по регулярным выражением.
Завтра пойду в книжный магазин. Чего нибудь посоветуете?
Дмитрий Котеров:
Конечно. Джефа Фридла.
http://dklab.ru/chicken/nablas/12.html

Вот еще (в подарок за усердие) ссылка:
http://www.perldoc.com/perl5.6.1/pod/perlre.html
pav:
Чего нибудь посоветуете?
"Регулярные выражения 2-е издание" Дж. Фридлаж. Отличная книжка. Автор прекрасно излагает материал, все предельно понятно даже людям которые ранее не встречались с регулярными выражениями. Большое кол-во примеров (действительно нужнах, которые могут пригодится в реальной работе). Подробно рассматриваются регулярные выражения в Perl, Java, .NET, различные диалекты регулярных выражений и конечно сама консепция регулярных выражений.
Педагог:
Купил я эту книжку (три магазина обошел). Нормальная, доходчивая. Правда некоторые моменты с первого раза еще не "прочувствовал" (типа опережающей проверки), но думаю с десятого раза "въеду". Правда книга изобилует ошибками (опечатками, недосмотрами), которые могут запутать. Приходится с ручкой в руках ее читать и корректировать. Пока прочитал 2 главы. Надо еще будет вторую главу перечитать. Теперь уже в регулярных выражениях, предложенных Дмитрием, я вижу гораздо больше знакомых букв, надо будет завтра на свежую голову врубиться в механизм их действия (особенно последнего, с этой позиционной проверкой).

Эта тема на forum.dklab.ru