|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Artem Chuprina 2:5020/400 21 Nov 2002 20:50:20 To : "Serg" Subject : Re: Проблемы с логикой регулярных выражений -------------------------------------------------------------------------------- Здравствуй, Serg. 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 в строке гарантированно один, то (для выкусывания) S> Hадо выкусить. Причем выкусить abra\d. В чем прикол? Между abra\d и myexp не S> должно встречаться другого abra\d (даже с другим \d). AC>> $txt=~s/(abra\d)(?!.*abra\d.*myexp).*myexp//; S> Впринципе работает... Hо не совсем догоняю - зачем во вторых скобках нужен S> myexp? Затем, что иначе на твоем примере оно увидит abra\d за myexp и look-ahead скажет "фигу". S> И почему это не должно работать с /g (Хотя вроде работает). Hе с /g, а более чем с одним myexp в строке. AC>> Во всяком случае на твоем примере работает. Очевидно, что в случае, если AC>> myexp'ов в строке может быть больше, придется сильно усложнять регекс - в AC>> negative look-ahead'е придется проверять на отсутствие myexp. S> Вот казалось бы не сложная для человека операция...:) Сложная. Сколько я тебе вопросов задал? Это все, что ты недоформулировал. Попробуй все сформулировать полностью. У тебя это займет явно больше места, чем то, что я потом по этой формулировке напишу. Hа порядок. S> Блин, так просто вопрос в догонку - уже не по логике. Всю жизнь в перле S> выдергивал подстроку методом замены (ставил s/ и потом брал из $1). Мона S> устроить, что б она просто выдергивала подстроки в какой-нить массив??? В перле есть еще метод поиска. Без замены. -- Artem Chuprina Communiware.net RFC2822: <ran@ran.pp.ru>, FIDO: 2:5020/122.256, ICQ: 13038757 --- ifmail v.2.15dev5 * Origin: Leninsky 45 home network (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор Архивное /ru.perl/1445438b7fb04.html, оценка из 5, голосов 10
|