2015-09-24 3 views
0

Мне нужно создать регулярное выражение, которое может соответствовать только имена из:Match один/несколько группа только если разделены разделителем

Dany and Andy 
Steve 
Dany and Steve and Andy 
Andy and Steve 

но failes совпадать с именами из:

and 
and Dany 
Steve and Nancy and 

другими словами, мне нужно регулярное выражение, которое соответствует либо:

  1. Имя.
  2. Два имени, если они разделены разделителем 'и'.
  3. Три имени, если каждый из них отделен от предыдущего/следующего разделителем 'и'.

Что я до сих пор: https://regex101.com/r/qQ2fY2/1 Это некрасиво и я не люблю:/Я также не нравится тот факт, что я должен ввести «Kuba» дважды (я хотел бы поставить его только один раз).

Может ли кто-нибудь дать мне представление о том, как его выполнить? (я пробовал с lookaheads и т. д., но я думаю, я не могу этого сделать: /).

Спасибо!

ответ

1

В основном то, что вы пытаетесь матча

^\w+(?: and \w+)*$ 
  • \w+ А слово с последующим
  • " and " и другое слово (любое число раз)

Но это означает другое условие: слово не может быть "and". Для этого вам нужен негативный взгляд, чтобы гарантировать, что это не "and", прежде чем подбирать слово.

^(?!and\b)\w+(?: and (?!and\b)\w+)*$ 
  • Примечание Я использовал \b (word boundary), чтобы избежать сопоставления имен, как "Энди".

DEMO

+0

YESS !! Это именно то, что я хотел! Спасибо брат. – Danon

Смежные вопросы