Как инвертировать целый regex?

У меня есть regex, например (ma|(t){1}). Это соответствует ma и t и не соответствует bla.

Я хочу инвертировать regex, таким образом он должен соответствовать bla и нет ma и t, путем добавления чего-то к этому regex. Я знаю, что могу записать bla, фактический regex однако более сложен.

83
задан Griffin 25 March 2013 в 07:26
поделиться

2 ответа

Использовать отрицательный поиск: (?! шаблон )

Положительный поиск может использоваться, чтобы утверждать, что шаблон соответствует . Отрицательный поиск противоположен: он используется, чтобы утверждать, что шаблон НЕ совпадает. Некоторые разновидности поддерживают утверждения; некоторые накладывают ограничения на просмотр назад и т. д.

Ссылки на regular-expressions.info

См. также

Другие примеры

Это попытки придумать решения игрушечных задач с помощью регулярных выражений в виде упражнений; они должны быть образовательными, если вы пытаетесь изучить различные способы использования поисковых запросов (их вложение, использование для захвата и т. д.):

91
ответ дан 24 November 2019 в 08:53
поделиться

Предполагая, что вы хотите запретить только те строки, которые полностью соответствуют регулярному выражению (т. Е. mmbla допустимы, а мм - нет), это то, что вам нужно:

^(?!(?:m{2}|t)$).*$

(?! (?: m {2} | t) $) - отрицательный опережающий просмотр ; он говорит: «начиная с текущей позиции, следующие несколько символов - , а не мм или t , за которыми следует конец строки». Якорь начала ( ^ ) в начале гарантирует, что просмотр вперед применяется в начале строки. Если это удается, . * идет вперед и поглощает строку.

К вашему сведению, если вы используете метод Java match () , вам действительно не нужны ^ и последний $ , но они не причиняйте вреда. Однако требуется $ внутри опережающего просмотра.

50
ответ дан 24 November 2019 в 08:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: