|
|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Artem Chuprina 2:5020/400 17 Sep 2002 13:21:44 To : Aleksey Cheusov Subject : Re: Как grep'ом поискать по ИЛИ? -------------------------------------------------------------------------------- Здравствуй, Aleksey Cheusov. >> >> SAK>> Люди, ткните пальцем, как grep заставить искать по ИЛИ из двух слов? >> >> SAK>> Как по "И" я знаю, а вот "ИЛИ"? >> AC> > >> >> VW> egrep "(слово|слово)" >> AC> > >> AC> > Вот "И" как раз сложнее... AC> > >> AC> Кстати, а почему ни в одной regex библиотеке нет >> AC> возможности пересекать/вычитать регулярные выражения. AC> > AC> > Сэр не знаком с perl? AC> Hеа, не знаком. AC> И мне даже не стыдно. AC> Ужас! AC> Предпочитаю не редактировать бинарные файлы. Перловые файлы, пока в них русского нет, распознаются как текстовые. Так что ты кого-то с кем-то перепутал. :-) (кстати, предлагаю показать мне эквивалент perl -ne 'print if /^(?!ab{5,12}cd)ab*c/' на любом менее бинарном по мнению благородного дона движке. Возможно, я не очень удачно подобрал пример, но суть понятна - grep ab*c, но не ab{5,12}cd, где {5,12} - "от 5 до 12". И мы посмотрим, кто бинарнее...) AC> Гусары!!! Молчать !!! Hо я уже знаю, что сейчас будет... :)) AC> Hо если в Perl отрицание есть - это хорошо. AC> Hе знал. AC> А вычитание в нем есть? Вычитание - это "удовлетворяет A, но не B"? Отрицание в регексах (и иначе его бессмысленно делать) - look-ahead либо look-behind, т.е. не ест текст. В силу чего вычитание по сути эквивалентно отрицанию. >> AC> Если regex engine DFA-based, то это несложно делается и >> AC> алгоритмы давно изветны. AC> > AC> > А есть уверенность, что с сохранением прочих свойств там все нормально? AC> > Ломы туда закапываться, но известно, что отрицание - это лучший способ AC> > все сломать. Кроме того, в MRE написано (сам не прикидывал), что с DFA AC> > невозможно backreferences делать. AC> Вот backreferences как-раз нужны ооочень редко. AC> А вот вычитание пригодилось бы. Они не всем нужны ооочень редко. Типичная задача - поймать парную кавычку, если кавычкой может быть как ', так и ". >> AC> Что может быть естественнее отрицать petyu вот так AC> > >> AC> \!(petya) >> AC> или вот так >> AC> (.*\-petya) AC> > >> AC> вместо >> AC> $|[^p]|p[^e]|pe[^t]|pet[^y]|pety[^a] AC> > AC> > Для более сложного выражения это будет уже недостаточно конечный автомат. AC> Отрицание/вычитание/пересечение регулярных множеств остается регулярным AC> множеством, так что здесь никаких проблем. За никаких не поручусь. Экспоненту на этом набрать очень несложно. AC> > В AC> > перле есть negative look-ahead и look-behind, но последний ограничен AC> > регексами AC> Поищу в доках, а то что-то я не понял ;-) perldoc perlre -- Artem Chuprina Communiware.net RFC2822: <ran@ran.pp.ru>, FIDO: 2:5020/358.49, ICQ: 13038757 --- ifmail v.2.15dev5 * Origin: Leninsky 45 home network (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/144541fccedeb.html, оценка из 5, голосов 10
|