Как отменить все регулярное выражение?

У меня есть регулярное выражение, например (ma|(t){1}). Он соответствует ma и t и не соответствует bla.

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

Ответ 1

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

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

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

См. также

Дополнительные примеры

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

Ответ 2

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

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

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

FYI, если вы используете метод Java matches(), вам действительно не нужен ^ и окончательный $, но они не наносят никакого вреда. Тем не менее, $ внутри lookahead требуется.

Ответ 3

\b(?=\w)(?!(ma|(t){1}))\b(\w*)

это для данного регулярного выражения.
\ b - найти границу слова.
положительный взгляд вперед (? =\w) здесь, чтобы избежать пробелов.
негативный взгляд на исходное регулярное выражение заключается в том, чтобы предотвратить его совпадение.
и, наконец, (\ w *) должен поймать все слова, которые остались.
группа, которая будет удерживать слова, - группа 3.
простой (?! pattern) не будет работать, поскольку любая подстрока будет соответствовать простой ^ (?! (?: m {2} | t) $). * $не будет работать, так как он зернистость - это полные строки