Здравствуйте, AlexeyQ, Вы писали:
AQ>Соссбно вопрос — как написать шаблон вида "строка содержит YYY, но не содержит XXX"? Гуру, поделитесь знанием, пожалуйста!
А зачем его писать? Самое просто разложить на два выражения "строка содержит YYY" и "строка содержит XXX", и со вторым взять отрицание.
К примеру, в случае grep
AQ>>Надо именно одним регекспом S>А строки произвольные?
Да, конечно. Я просто не могу сообразить, как сделать отрицание. Было бы можно как для классов символов делать s =~ /contains.*[^(not contains)]/ — но не работает же, not contains воспринимается как множество символов... Тут еще одна проблема — с относительным порядком contains и not contains, ну да пофиг.
Переформулирую задачу. Достаточно просто узнать, как через оператор =~ сделать запрос "дай строки, НЕ содержащие XXX". Использование оператора !~ невозможно.
Здравствуйте, AlexeyQ, Вы писали:
AQ>>>Надо именно одним регекспом S>>А строки произвольные? AQ>Да, конечно. Я просто не могу сообразить, как сделать отрицание. Было бы можно как для классов символов делать s =~ /contains.*[^(not contains)]/ — но не работает же, not contains воспринимается как множество символов... Тут еще одна проблема — с относительным порядком contains и not contains, ну да пофиг.
AQ>Переформулирую задачу. Достаточно просто узнать, как через оператор =~ сделать запрос "дай строки, НЕ содержащие XXX". Использование оператора !~ невозможно.
Тогда не знаю (надо смотреть, есть ли специальный синтаксис в Perl-е).
Если нет, срочно писать им!!! Это же будет вещь которую можно сделать только одним способом,
что противоречит идеологии Perl-а =))).
Вообще, по смыслу, нужно взять дополнение регулярного выражения. Только при этом, если
мне не изменяет память, оно может экспоненциально вырасти =).
Здравствуйте, AlexeyQ, Вы писали:
AQ>Во, ближе к теме. Токо я не знаю, что есть дополнение регулярного выражения. Деревня, сорри...
Я это здесь читал. Рекомендую.
Правда, там, кажется, доказательство регулярности дополнения неконструктивное.
Здравствуйте, AlexeyQ, Вы писали:
AQ>Соссбно вопрос — как написать шаблон вида "строка содержит YYY, но не содержит XXX"? Гуру, поделитесь знанием, пожалуйста!
Кажется, это называется positive/negative backtracking.
Вот вчера только применял.
Надо было найти все вхождения символа ], кроме входящих в последовательность [[].
Регэксп выглядел так:
Regex endSquareBracketRegex = new Regex(@"(\](?<!\[\[\]))");
Здравствуйте, Smal, Вы писали:
S>Здравствуйте, AlexeyQ, Вы писали:
AQ>>Во, ближе к теме. Токо я не знаю, что есть дополнение регулярного выражения. Деревня, сорри... S>Я это здесь читал. Рекомендую. S>Правда, там, кажется, доказательство регулярности дополнения неконструктивное.
Это еще и чисто теоретическая вещь — дополнение? Да мне бы регексп написать...
Здравствуйте, AlexeyQ, Вы писали:
AQ>Да, конечно. Я просто не могу сообразить, как сделать отрицание. Было бы можно как для классов символов делать s =~ /contains.*[^(not contains)]/ — но не работает же, not contains воспринимается как множество символов... Тут еще одна проблема — с относительным порядком contains и not contains, ну да пофиг.