Zakładając, że chcesz zabronić tylko ciągów, które całkowicie pasują do wyrażenia regularnego (tj. mmbla
Jest w porządku, ale mm
nie jest), oto czego chcesz:
^(?!(?:m{2}|t)$).*$
(?!(?:m{2}|t)$)
to negatywne spojrzenie w przód ; mówi „zaczynając od bieżącej pozycji, kilka następnych znaków nie jest mm
lub t
, po których następuje koniec ciągu”. Start anchor ( ^
) na początku zapewnia, że lookahead zostanie zastosowany na początku ciągu. Jeśli to się powiedzie, .*
idzie dalej i zużywa ciąg.
FYI, jeśli używasz metody Java matches()
, tak naprawdę nie potrzebujesz the ^
i final $
, ale nie wyrządzają one żadnej szkody. Wymagane jest jednak $
wewnętrzne spojrzenie w przód.
{1}
jest całkowicie bezużyteczny. (Jeśli uważasz, że zapewnia to jakąś wartość, dlaczego nie napiszesz((m{1}a{1}){1}|(t){1}){1}
?)