регэксп который ищет букву л, после которой не стоит восклицательный знак

alex234

Guest
регэксп

Мне надо написать регексп (Perl-совм.), который ищет букву л, после которой не стоит восклицательный знак. При этом мне неободимо, чтобы регексп находил букву л, после которой ничего не стоит.
Я сделал:
/л[^!]/
работает, но если после л нет никакого знака, то он не находит.
Я переделал:
/л[^!]?/
в этом случае, находит даже тогда, когда есть воскл. знак после л.
Как написать такой регэксп?
 

tony2001

TeaM PHPClub
обрати внимание на название топика.
хинт: правила форума - самый первый топик в форуме.
 

alex234

Guest
извините, за некорректное название топика (кажется его название уже поменяли), но вопрос от этого не поменялся...
 

Demiurg

Guest
Georgy, будь добр, не давай больше таких ответов.
 

alex234

Guest
спасибо Demiurg'у

вопрос: вертикальная черта обозначает логическое "и"?
вообще, что она обозначает?
 

Demiurg

Guest
или.
но в твоем случае я бы не использовал регулярнеые выражения. Можно просто найти все буквы л, а потом смотреть, что стоит за ними.
 

alex234

Guest
но регэкспом код короче.
Объясни, почему тогда не следует их использовать?
 

Demiurg

Guest
короткий код - это еще не значит правильный.
while(true); - тоже очень короткий код получаестя а толку ?
Регулярные выражения - очень мощьная вещь, и использовать их там, где можно обойтись простейшим поиском - все равно, что стрелять из пушки по воробьям.
 

alex234

Guest
ну а на быстродействие это как-то отражается?
 

Demiurg

Guest
еще как.
Представь, что ты хочешь на самолете пролететь 100 метров (с разогревом, взлетом, посадкой и тд.)
 

alex234

Guest
Проблем - я попробовал использовать этот regexp в preg_replace, но он "съедает" букву после л. Что делать, чтобы этого не было?
 

Demiurg

Guest
что значит съедает ? тебе же надо, что бы он находил, вот он и находит. Tы preg_replace делаешь ?
 

alex234

Guest
Да, сейчас мне надо использовать этот регекс в preg_replace.

Проблем: заменяется не только л, но и буква, следующая за л. Как сделать, чтобы такого не было?
 

Demiurg

Guest
preg_replace('/(л[^!])|(л$)/' , '\1еще чтонибудь' , $string);
 

alex234

Guest
2 Demiurg:
спасибо, конечно, но работает не так как надо.

2 Sababa:
Спасибо. Работает так, как надо. Скажи что значит ?=
 

Sababa

Guest
(?= ... ) - используется именно с группировкой
позитивная опережающая проверка без поглащения
в пхп правда реализована не совсем корректно, но так работает.
 
Сверху