Предполагая, что вы хотите запретить только строки, которые полностью соответствуют регулярному выражению (то есть, mmbla
это нормально, но mm
нет), это то, что вы хотите:
^(?!(?:m{2}|t)$).*$
(?!(?:m{2}|t)$)
отрицательный взгляд вперед ; он говорит: «начиная с текущей позиции, следующие несколько символов не являются mm
или t
, за которыми следует конец строки». Начальный якорь ( ^
) в начале гарантирует, что просмотр вперед применяется в начале строки. Если это удастся, то .*
продолжит и потребляет строку.
К вашему сведению, если вы используете matches()
метод Java , вам действительно не нужны the ^
и final $
, но они не причиняют никакого вреда. Однако $
внутренний просмотр вперед необходим.
{1}
совершенно бесполезно. (Если вы думаете, что это дает некоторую ценность, почему бы вам не написать((m{1}a{1}){1}|(t){1}){1}
?)