URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 7243
[ Назад ]

Исходное сообщение
"паттерн regexp"

Отправлено GHopper , 09-Мрт-08 11:07 
Здравствуйте!

PHP, PCRE

$s = preg_replace("/^[^m]*$/m", "", $s); - удалит все строки, не имеющие символ "m".

Вопрос: как изменить конструкцию, чтобы вместо "m" критерием выступала подстрока "mm"? Тоесть нужно удалить все строки, в которых присутствует подстрока "mm"

Не хочу, чтобы решением были костыли типа циклической обработки строк или еще чего - я ищу именно конструкцию паттерна, которая удовлетворит заданному условию.


Содержание

Сообщения в этом обсуждении
"паттерн regexp"
Отправлено angra , 09-Мрт-08 18:07 
PHP явно убивает мозг. Зачем для удаления строк использовать замену? Используйте preg_match для проверки наличия шаблона, если нашли оставляем, не нашли убираем.

"паттерн regexp"
Отправлено GHopper , 10-Мрт-08 05:09 
>PHP явно убивает мозг. Зачем для удаления строк использовать замену? Используйте preg_match
>для проверки наличия шаблона, если нашли оставляем, не нашли убираем.

Написано ведь: "Не хочу, чтобы решением были костыли типа циклической обработки строк или еще чего - я ищу именно конструкцию паттерна, которая удовлетворит заданному условию."!

Просто меня интересует сама возможность написания такого паттерна, а не метод решения поставленной задачи. Ну и вообще, для чего тогда в PHP нужна функция preg_replace, если не для замены текста (оно-же удаление строк)?


"паттерн regexp"
Отправлено angra , 10-Мрт-08 16:21 
Ну если вам нравится сношать свой мозг глупыми задачами, то зачем задавать вопрос на форуме? Если интересует принципиальная возможность, то да такое возможно. Причем регекс очень даже простой. Некоторое время назад давал решение на этом форуме для похожей, но более сложной задачи. Только там это действительно было нужно, а вы задаете вопрос от нефиг делать.

"паттерн regexp"
Отправлено GHopper , 11-Мрт-08 06:57 
>Ну если вам нравится сношать свой мозг глупыми задачами, то зачем задавать
>вопрос на форуме? Если интересует принципиальная возможность, то да такое возможно.
>Причем регекс очень даже простой. Некоторое время назад давал решение на
>этом форуме для похожей, но более сложной задачи. Только там это
>действительно было нужно, а вы задаете вопрос от нефиг делать.

Для меня эта задача не оказалась глупой - ее решение я искал два дня! И мой регэксп получился совсем не простым, стало быть есть более изящьное решение, к которому я пока не пришел... у каждого свои сильные и слабые стороны!

Я задаю вопрос не от нефиг делать, а от того, что мне это, как минимум, интересно знать. По вашей логике все обсуждения в интернете, касающиеся космоса, вообще нужно закрыть, т.к. люди спрашивают от "нефиг делать" и на самом деле эта информация им не нужна! Даже на этом форуме обсуждается множество теоретических вопросов из которых практическую реализацию находят лишь некоторые!

А вообще, такие ответы лучше не давать - если вы считаете, что тема не достойна обсуждения, то разумнее просто промолчать, т.к. критика повлечет дальнейшее развитие темы, в следствии чего она будет мозолить людям глаза гораздо дольше, чем могло-бы быть.


"паттерн regexp"
Отправлено angra , 11-Мрт-08 16:17 
Если бы я вам не ответил, то вы бы считали что задача очень сложная и никто не может решить ее. А так вы знаете, что просто в такой постановке никому не хочется вам помогать.

Одно из решений для более общего случая - удалить строки в которых нет искомой подстроки(а не просто двух идущих подряд символов) - на примере подстроки asdf:
s/^(.*?asdf.*)?.*$/\1/m
Также можно сделать на основе заглядываний вперед/назад, что лучше подходит для пары символов, хотя и работает для подстрок.