如何在正则表达式中使用if-then?

时间:2011-10-04 16:22:52

标签: regex postfix-mta

我正在为Postfix编写一个定义其虚拟域映射的正则表达式。我想要捕获除两个域之外的域的所有子域。

假设我的域名是 example.com 且两个排除子域名是 in,mail ,我写了以下正则表达式:

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

它应该识别 whatever.example.com ,但不能识别 in.example.com mail.example.com

它在RegExr中有效,但在Postfix和Ruby中都不起作用。我假设我正在使用if-then错误,正确的语法是什么?还有其他选择吗?

1 个答案:

答案 0 :(得分:1)

如果您使用锚点,那么它应该可以使用。

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

here on Rubular

开头\b处的锚点是单词边界。这可以确保您的子域名之前没有单词字符,因此它不再与ail中的mail匹配。

匹配

  

www.example.com
  whatever.example.com

而不是

  

mail.example.com
  in.example.com

<强>更新

^锚点可能是更好的选择。这将匹配字符串的开头。

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

对于您的示例,它没有任何区别,但如果您的URL以非单词字符开头,那么单词边界就会出错。