Как опровергнуть все регулярное выражение? - PullRequest
80 голосов
/ 14 апреля 2010

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

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

Ответы [ 3 ]

87 голосов
/ 14 апреля 2010

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

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

Ссылки на регулярные выражения.info

Смотри также

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

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

45 голосов
/ 14 апреля 2010

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

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

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

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

0 голосов
/ 08 октября 2017
\b(?=\w)(?!(ma|(t){1}))\b(\w*)

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

...