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



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



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

582   3  

3 ответов:

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

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

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

см. также

примеры

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

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

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

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

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

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

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

Comments

    Ничего не найдено.