Regexp: найти строку, НЕ содержащую X
От: AlexeyQ  
Дата: 14.12.07 06:34
Оценка:
Соссбно вопрос — как написать шаблон вида "строка содержит YYY, но не содержит XXX"? Гуру, поделитесь знанием, пожалуйста!
Re: Regexp: найти строку, НЕ содержащую X
От: Smal Россия  
Дата: 14.12.07 07:19
Оценка:
Здравствуйте, AlexeyQ, Вы писали:

AQ>Соссбно вопрос — как написать шаблон вида "строка содержит YYY, но не содержит XXX"? Гуру, поделитесь знанием, пожалуйста!

А зачем его писать? Самое просто разложить на два выражения "строка содержит YYY" и "строка содержит XXX", и со вторым взять отрицание.
К примеру, в случае grep
grep -v XXX | grep YYY


На перле
if ( $s =~ /XXX/ and $s !~ /YYY/ )
{
   ....
}
С уважением, Александр
Re[2]: Regexp: найти строку, НЕ содержащую X
От: AlexeyQ  
Дата: 14.12.07 07:39
Оценка:
Надо именно одним регекспом
Re[3]: Regexp: найти строку, НЕ содержащую X
От: Smal Россия  
Дата: 14.12.07 07:41
Оценка:
Здравствуйте, AlexeyQ, Вы писали:

AQ>Надо именно одним регекспом


А строки произвольные?
С уважением, Александр
Re[4]: Regexp: найти строку, НЕ содержащую X
От: AlexeyQ  
Дата: 14.12.07 08:00
Оценка:
AQ>>Надо именно одним регекспом
S>А строки произвольные?
Да, конечно. Я просто не могу сообразить, как сделать отрицание. Было бы можно как для классов символов делать s =~ /contains.*[^(not contains)]/ — но не работает же, not contains воспринимается как множество символов... Тут еще одна проблема — с относительным порядком contains и not contains, ну да пофиг.

Переформулирую задачу. Достаточно просто узнать, как через оператор =~ сделать запрос "дай строки, НЕ содержащие XXX". Использование оператора !~ невозможно.
Re[5]: Regexp: найти строку, НЕ содержащую X
От: Smal Россия  
Дата: 14.12.07 08:16
Оценка:
Здравствуйте, AlexeyQ, Вы писали:

AQ>>>Надо именно одним регекспом

S>>А строки произвольные?
AQ>Да, конечно. Я просто не могу сообразить, как сделать отрицание. Было бы можно как для классов символов делать s =~ /contains.*[^(not contains)]/ — но не работает же, not contains воспринимается как множество символов... Тут еще одна проблема — с относительным порядком contains и not contains, ну да пофиг.

AQ>Переформулирую задачу. Достаточно просто узнать, как через оператор =~ сделать запрос "дай строки, НЕ содержащие XXX". Использование оператора !~ невозможно.


Тогда не знаю (надо смотреть, есть ли специальный синтаксис в Perl-е).
Если нет, срочно писать им!!! Это же будет вещь которую можно сделать только одним способом,
что противоречит идеологии Perl-а =))).

Вообще, по смыслу, нужно взять дополнение регулярного выражения. Только при этом, если
мне не изменяет память, оно может экспоненциально вырасти =).
С уважением, Александр
Re[6]: Regexp: найти строку, НЕ содержащую X
От: AlexeyQ  
Дата: 14.12.07 08:30
Оценка:
Во, ближе к теме. Токо я не знаю, что есть дополнение регулярного выражения. Деревня, сорри...
Re[7]: Regexp: найти строку, НЕ содержащую X
От: Smal Россия  
Дата: 14.12.07 08:40
Оценка:
Здравствуйте, AlexeyQ, Вы писали:

AQ>Во, ближе к теме. Токо я не знаю, что есть дополнение регулярного выражения. Деревня, сорри...

Я это здесь читал. Рекомендую.
Правда, там, кажется, доказательство регулярности дополнения неконструктивное.
С уважением, Александр
Re: Regexp: найти строку, НЕ содержащую X
От: Сергей Туленцев Россия http://software.tulentsev.com
Дата: 14.12.07 09:01
Оценка: 1 (1)
Здравствуйте, AlexeyQ, Вы писали:

AQ>Соссбно вопрос — как написать шаблон вида "строка содержит YYY, но не содержит XXX"? Гуру, поделитесь знанием, пожалуйста!


Кажется, это называется positive/negative backtracking.
Вот вчера только применял.

Надо было найти все вхождения символа ], кроме входящих в последовательность [[].
Регэксп выглядел так:
Regex endSquareBracketRegex = new Regex(@"(\](?<!\[\[\]))");
--
Re[8]: Regexp: найти строку, НЕ содержащую X
От: AlexeyQ  
Дата: 14.12.07 09:53
Оценка:
Здравствуйте, Smal, Вы писали:

S>Здравствуйте, AlexeyQ, Вы писали:


AQ>>Во, ближе к теме. Токо я не знаю, что есть дополнение регулярного выражения. Деревня, сорри...

S>Я это здесь читал. Рекомендую.
S>Правда, там, кажется, доказательство регулярности дополнения неконструктивное.

Это еще и чисто теоретическая вещь — дополнение? Да мне бы регексп написать...
Re[5]: Regexp: найти строку, НЕ содержащую X
От: sembel Fast Version Control System
Дата: 14.12.07 11:14
Оценка:
Здравствуйте, AlexeyQ, Вы писали:

AQ>Да, конечно. Я просто не могу сообразить, как сделать отрицание. Было бы можно как для классов символов делать s =~ /contains.*[^(not contains)]/ — но не работает же, not contains воспринимается как множество символов... Тут еще одна проблема — с относительным порядком contains и not contains, ну да пофиг.


называется Negative lookahead matches (?!XXX)

http://www.google.com/search?sourceid=navclient&amp;ie=UTF-8&amp;rls=GGLL,GGLL:2007-50,GGLL:en&amp;q=Negative+lookahead+matches+
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.