Suponiendo que solo desea rechazar cadenas que coincidan con la expresión regular por completo (es decir, mmblaestá bien, pero mmno 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 mmo 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}?)