Как построить регулярное выражение для строки, которая требует нескольких проверок - PullRequest
1 голос
/ 03 июля 2019

Я пытаюсь создать некоторые регулярные выражения для проекта, который я сейчас разрабатываю.

Мне нужно знать, как создать регулярное выражение, соответствующее строке со следующим шаблоном:

ABC Word Word

  1. Мне нужен приставка с заглавными буквами из трех букв в начале [AZ]
  2. Все слова, которые некоторые последующие должны быть разделены пробелом, и им нужноначинать с заглавной буквы.
  3. Строка не может содержать PM или MP в качестве вторичного префикса.(Абзац PM AB) Это относится к любой позиции.

Я придумал это регулярное выражение:

(^ [AZ] {3}) (. * [AZ][az] {1,})

Он корректно работает со строкой, такой как: «ABC Create User», но также соответствует «ABCDE Create User», «ABC CreAte User» и т. д.

1 Ответ

1 голос
/ 03 июля 2019

Обратите внимание, что .* соответствует любым 0 или более символам, кроме символов разрыва строки, как можно больше, и этот шаблон редко полезен при проверке строк.

Вы можете использовать

^[A-Z]{3} (?!(?:MP|PM)\b)[A-Z][a-z]+ (?!(?:MP|PM)\b)[A-Z][a-z]+

Или, используя группу без захвата с ограничивающим квантификатором:

^[A-Z]{3}(?: (?!(?:MP|PM)\b)[A-Z][a-z]+){2}
         ^^^                           ^^^^ 

См. Демонстрационные примеры regex # 1 и демонстрационные примеры regex # 2 .

Если вам нужно сопоставить два или более таких Word с, используйте

^[A-Z]{3}(?: (?!(?:MP|PM)\b)[A-Z][a-z]+){2,}
                                        ^^^^

Часть (?!(?:MP|PM)\b)[A-Z][a-z]+ выполняет следующие действия:

  • (?!(?:MP|PM)\b) отрицательный прогноз проверяет, равно ли слово MP или PM, и не соответствует, если шаблон соответствует
  • [A-Z][a-z]+ использует заглавную букву, за которой следует 1+ строчнаяиз них.

enter image description here

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