|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Serg 2:5020/400 21 Nov 2002 20:41:07 To : Artem Chuprina Subject : Re: Проблемы с логикой регулярных выражений -------------------------------------------------------------------------------- Tue Nov 19 2002 15:51, Artem Chuprina wrote to "Serg": AC> From: Artem Chuprina <ran@ice.ru> AC> Здравствуй, Serg. S>> Mon Nov 18 2002 22:25, Serg wrote to All: S>>> From: "Serg" <serg@enseza.elcom.ru> S>>> Hi All, S>>> $txt=~s/(abra\d)(?:abra\d)*myexp//g; S>> Сорри, конечно же не (?:), а (?!). Глючить уже с этими регэкспами начал:) S>> Тогда конечно регэксп выглядит так: S>> $txt=~s/(abra\d)(?!abra\d)*myexp//g; S>> Hо тем не менее он всеравно не работает:(. AC> Если так для каждого myexp, то я вот так вот сходу и не сделаю... Тебе AC> его надо узнать или выкусить из строки вместе с myexp и всем, что между AC> ними? Если myexp в строке гарантированно один, то (для выкусывания) Hадо выкусить. Причем выкусить abra\d. В чем прикол? Между abra\d и myexp не должно встречаться другого abra\d (даже с другим \d). AC> $txt=~s/(abra\d)(?!.*abra\d.*myexp).*myexp//; Впринципе работает... Hо не совсем догоняю - зачем во вторых скобках нужен myexp? И почему это не должно работать с /g (Хотя вроде работает). AC> Во всяком случае на твоем примере работает. Очевидно, что в случае, если AC> myexp'ов в строке может быть больше, придется сильно усложнять регекс - в AC> negative look-ahead'е придется проверять на отсутствие myexp. Вот казалось бы не сложная для человека операция...:) Блин, так просто вопрос в догонку - уже не по логике. Всю жизнь в перле выдергивал подстроку методом замены (ставил s/ и потом брал из $1). Мона устроить, что б она просто выдергивала подстроки в какой-нить массив??? --- ifmail v.2.15dev5 * Origin: FidoNet Online - http://www.fido-online.com (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор Архивное /ru.perl/166796e5ffdba.html, оценка из 5, голосов 10
|