2013-09-10 4 views
1

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

  • если строка содержит «Hello» или «до свидания»
  • строка не может содержит «Мир» или «MyLove "
  • еще
  • строка должна содержит„Мир“или„MyLove“

Я попытался реализации severals без успеха. Вот последний:

(?(?=(\bHello\b|\bGoodbye\b)(?!World|MyLove)(World|MyLove))) 

Некоторый пример ожидающего результата:

  • Здравствуйте, как вы MyLove? false
  • Прощайте, моя дорогая! true
  • Приятно познакомиться! false
  • Приятно познакомиться с вами MyLove! true

Заранее благодарю вас за помощь.

Рафаель

+0

Не пытайтесь использовать одно регулярное выражение для сложных условий, в конечном итоге либо вытягивать ваши волосы или оскорбляют некоторой высокой репутацией самоуверенной SO пользователей :-) – paxdiablo

ответ

0

В зависимости от вашего вкуса регулярных выражений вы могли бы использовать что-то вроде:

(?x)        # allow whitespace and comments 
^         # anchor at start of string 
(?(?= .* \b(Hello|Goodbye)\b)  # if 
    (?! .* \b(World|MyLove)\b)  # then 
| (?= .* \b(World|MyLove)\b)  # else 
) 

Но это может быть более ясно написано на вашем языке напрямую. Например, в Perl:

/\b(Hello|Goodbye)\b/ ? 
!/\b(World|MyLove)\b/ : 
/\b(World|MyLove)\b/; 
+0

Ты regex king! Он отлично работает –

+0

Я использую .Net C#, он работает так, как вы писали напрямую! –

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