Suponiendo que solo desea rechazar cadenas que coincidan con la expresión regular por completo (es decir, mmbla
está bien, pero mm
no lo está), esto es lo que desea:
^(?!(?:m{2}|t)$).*$
(?!(?:m{2}|t)$)
es un negativo mirada hacia el futuro ; dice "a partir de la posición actual, los siguientes caracteres no son mm
o t
, seguidos del final de la cadena". El ancla de inicio ( ^
) al principio garantiza que la búsqueda anticipada se aplique al principio de la cadena. Si tiene éxito, .*
sigue adelante y consume la cuerda.
FYI, si está utilizando el matches()
método de Java , realmente no necesita el ^
y el final$
, pero no hacen ningún daño. Sin $
embargo, se requiere el interior de la anticipación.
{1}
es completamente inútil. (Si cree que proporciona algún valor, ¿por qué no escribe((m{1}a{1}){1}|(t){1}){1}
?)