Как отменить все регулярное выражение?
У меня есть регулярное выражение, например (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) $). * $не будет работать, так как он зернистость - это полные строки