Как использовать if-then в регулярных выражениях? - PullRequest
1 голос
/ 04 октября 2011

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

Предполагая, что мой домен example.com и два поддоменов исключения: in, mail , я написал следующее регулярное выражение:

(?(?!mail|in).+\.example.com)

Он должен распознавать what.example.com , но не in.example.com или mail.example.com .

Он работает в RegExr , но не работает ни в Postfix, ни в Ruby. Я предполагаю, что я использую if-then неправильно, каков правильный синтаксис? Есть ли другие варианты?

1 Ответ

1 голос
/ 05 октября 2011

Если вы используете якорь, то он должен работать.

\b(?!mail|in).+\.example.com

См. здесь, на Рубулярной

Якорь в начале \b является границей слова. Это гарантирует, что перед вашим поддоменом есть несловесный символ, и поэтому он больше не соответствует ail из mail.

Это соответствует

www.example.com
whatever.example.com

а не

mail.example.com
in.example.com

UPDATE

Возможно, якорь ^ - лучший выбор здесь. Это будет соответствовать началу строки.

^(?!mail|in).+\.example.com

Для ваших примеров это не имеет значения, но если ваш URL начинается с символа, не состоящего из слов, то это будет неправильно с границей слова.

...