Как отменить все регулярное выражение?
Я имею регулярное выражение, например (ma|(t){1})
. Он соответствует ma
и t
и не соответствует bla
.
Я хочу отрицать регулярное выражение, поэтому он должен соответствовать bla
а не ma
и t
, добавляя что-то к этому регулярному выражению . Я знаю, что могу написать bla
, однако реальное регулярное выражение, однако, более сложное.
- Изучение регулярных выражений
- Regex для строки, не заканчивающейся с заданным суффиксом
- Regex для разделения HTML-тегов
- В чем разница между квадратными скобками и круглыми скобками в регулярном выражении?
- Регулярное выражение для исключения набора ключевых слов
- RegEx, чтобы убедиться, что строка содержит по крайней мере один символ нижнего регистра, символ верхнего регистра, цифру и символ
- Что такое группа, не связанная с захватом? Что делает (? :)?
- Какое регулярное выражение никогда не будет соответствовать?
- В регулярных выражениях, что такое обратная ссылка / обратная ссылка?
- Разница между квантификаторами регулярных выражений плюс и звездами
- Regex Сопоставьте все символы между двумя строками
- Регулярное выражение для соответствия формату времени HH: MM
- Регулярное выражение для запрещения более 1 штриха последовательно
Используйте негативный обратный путь: (?!
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) $). * $ не будет работать, так как зернистость – это полные строки