Главная страница


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)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Re: Как grep\'ом поискать по ИЛИ?   Aleksey Cheusov   15 Sep 2002 18:49:54 
 Re: Как grep\'ом поискать по ИЛИ?   Artem Chuprina   17 Sep 2002 13:21:44 
Архивное /ru.linux/144541fccedeb.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional