Регулярное выражение для нескольких символов - PullRequest
0 голосов
/ 29 января 2019

Я хочу написать шаблон регулярного выражения, соответствующий строке, начинающейся с "Z" и не содержащей следующие 2 символа как "IU", за которыми следуют любые другие символы.

Я использую этот шаблон, но он не работает Z [^ (IU)] +. * $

  1. ZISADR - должно совпадать
  2. ZIUSADR - не должен совпадать
  3. ZDDDDR - должен совпадать

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Попробуйте это регулярное выражение:

^Z(?:I[^U]|[^I]).*$

Нажмите для демонстрации

Объяснение:

  • ^ - устанавливает начало строки
  • Z - соответствует Z
  • I[^U] - соответствует I, за которым следует любой символ, который не являетсяU
  • | - ИЛИ
  • [^I] - соответствует любому символу, который не является I
  • .* - соответствует 0+ вхождений любогосимвол, который не является новой строкой
  • $ - устанавливает конец строки
0 голосов
/ 29 января 2019

Если вы хотите отрицать определенные символы в строке, вы можете использовать класс символов, но если вы хотите отрицать более одного символа в определенной последовательности, вам нужно использовать отрицательный взгляд вперед и написать свое регулярное выражение, как это,

^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 в целом.

Демонстрационное решение, не ориентированное на будущее

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...