Если вы хотите отрицать определенные символы в строке, вы можете использовать класс символов, но если вы хотите отрицать более одного символа в определенной последовательности, вам нужно использовать отрицательный взгляд вперед и написать свое регулярное выражение, как это,
^Z(?!IU).*$
Демо
Также обратите внимание, что ваше первое слово ZISADR
будет соответствовать, поскольку Z
не сопровождается IU
Ваше регулярное выражение, Z[^(IU)]+.*$
будет соответствовать начальному с Z
, а класс [^(IU)]+
будет соответствовать любому символу, кроме (
I
U
и )
один или несколько раз, после чего следует.*
означает, что он будет соответствовать любым символам ноль или более раз, что не соответствует желаемому вами поведению.
Редактировать: предоставить решение без заблаговременного ожидания
НеРешение на основе -lookahead будет использовать это регулярное выражение,
^Z(?:I[^U]|[^I]U|[^I][^U]).*$
Это регулярное выражение имеет три основных варианта, которые включают все случаи, необходимые для покрытия.
I[^U]
- Гарантирует, если второйсимвол I
затем третий шне может быть U
[^I]U
- Гарантирует, если третий символ U
, тогда второй не должен быть I
[^I][^U]
- Гарантирует, что второй и третийсимволы не должны быть I
и U
в целом.
Демонстрационное решение, не ориентированное на будущее