(PHP)Простое регулярное выражение

Viktor Bartel
Дата: 17.08.2006 15:30:14
Добрый день

У меня опять возникла проблема с регулярным выражением, но в этот я не совсем понимаю почему это не работает
Вот пример фразы для мача:
D'après le roman de "America" de Bobby Grouve
Вот регулярное выражение:
D'après.+(roman|pièce|nouvelle|opéra).*(\"(.*?)\")+.*
Так вроде работает но предполагается что роман или название романа может быть опущенно, казалось бы что сложного меняю рег выр на
D'après.+(roman|pièce|nouvelle|opéra)?.*(\"(.*?)\")?+.*
Добавлаю просто ? в те места где лексемы может не быть, и после этого все каптор перестает захватывать ни роман ни его название если они есть. Ничего не могу понять почему что и как. Кто знает в чем дело? Заранее вам благодарен.

--
С уважением
Виктор Бартель
Anjey aka PM
Дата: 17.08.2006 15:36:03
D'après.+(roman|pièce|nouvelle|opéra)?.*(\"(.*?)\")?+.*

внимательно рассмотрим ваш RegExp

после того как вы сделали слово "роман" (или его аналоги) а также само название необязательными greedy выражение .+ (которое идет впереди всего regexp-а) захватывает слово "роман" а также его название под себя, соотвтетственно в параметрах вы ничего не получаете.

напомню:

Anjey aka PM
В данном случае они использованы в качестве ограничителей выражения (для чего обычно используют "/"). ~ в данном конкретном случае удобнее, т.к. разрешает не экранировать / в самом регулярном выражении а вообще русский перевод perldoc perlre вам пригодится


читать до полного понимания!!!!!!
Viktor Bartel
Дата: 17.08.2006 15:40:20
Блин так вот оно в чем дело, а как этого можно избежать? Я прочитаю док обещаю :). Спасибо

--
С уважением
Виктор Бартель
Anjey aka PM
Дата: 17.08.2006 15:43:37
если долго не думать -- достаточно заменить D'après.+ на D'après.+?
Viktor Bartel
Дата: 17.08.2006 15:45:28
Спасибо за помошь

--
С уважением
Виктор Бартель