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

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

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

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

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

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

  • Утверждения нулевой ширины Lookahead и Lookbehind
  • Сравнение вкусов

Смотрите также

  • Как преобразовать CamelCase в удобочитаемые имена на Java?
  • Regex для всех строк, не содержащих строку?
  • Регулярное выражение соответствует подстроке, за которой не следует определенная другая подстрока.

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

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

  • codingBat plusOut с использованием регулярного выражения
  • codingBat repeatEnd с использованием regex
  • codingbat wordEnds с использованием regex

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

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

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

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

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

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

  • Regex: соответствие до первого появления символа
  • Regex найти повторяющиеся числа
  • Исключить символы из classа символов
  • Заменить первое вхождение строки в Python
  • Regex: игнорировать чувствительность к регистру
  • Регулярные выражения в примерах C:?
  • Образец RegEx: любые две буквы, за которыми следуют шесть номеров
  • Сопоставление всех слов, кроме одного
  • Регулярное выражение для чисел с плавающей запятой
  • Существует ли регулярное выражение для определения правильного регулярного выражения?
  • Регулярное выражение для поиска текста между второй и третьей косой чертой
  • Давайте будем гением компьютера.