У меня есть regex, например (ma|(t){1})
. Это соответствует ma
и t
и не соответствует bla
.
Я хочу инвертировать regex, таким образом он должен соответствовать bla
и нет ma
и t
, путем добавления чего-то к этому regex. Я знаю, что могу записать bla
, фактический regex однако более сложен.
Использовать отрицательный поиск: (?!
шаблон
)
Положительный поиск может использоваться, чтобы утверждать, что шаблон соответствует . Отрицательный поиск противоположен: он используется, чтобы утверждать, что шаблон НЕ совпадает. Некоторые разновидности поддерживают утверждения; некоторые накладывают ограничения на просмотр назад и т. д.
Это попытки придумать решения игрушечных задач с помощью регулярных выражений в виде упражнений; они должны быть образовательными, если вы пытаетесь изучить различные способы использования поисковых запросов (их вложение, использование для захвата и т. д.):
Предполагая, что вы хотите запретить только те строки, которые полностью соответствуют регулярному выражению (т. Е. mmbla
допустимы, а мм
- нет), это то, что вам нужно:
^(?!(?:m{2}|t)$).*$
(?! (?: m {2} | t) $)
- отрицательный опережающий просмотр ; он говорит: «начиная с текущей позиции, следующие несколько символов - , а не мм
или t
, за которыми следует конец строки». Якорь начала ( ^
) в начале гарантирует, что просмотр вперед применяется в начале строки. Если это удается, . *
идет вперед и поглощает строку.
К вашему сведению, если вы используете метод Java match ()
, вам действительно не нужны ^
и последний $
, но они не причиняйте вреда. Однако требуется $
внутри опережающего просмотра.