我正在为Postfix编写一个定义其虚拟域映射的正则表达式。我想要捕获除两个域之外的域的所有子域。
假设我的域名是 example.com 且两个排除子域名是 in,mail ,我写了以下正则表达式:
(?(?!mail|in).+\.example.com)
它应该识别 whatever.example.com ,但不能识别 in.example.com 或 mail.example.com 。
它在RegExr中有效,但在Postfix和Ruby中都不起作用。我假设我正在使用if-then错误,正确的语法是什么?还有其他选择吗?
答案 0 :(得分:1)
如果您使用锚点,那么它应该可以使用。
\b(?!mail|in).+\.example.com
开头\b
处的锚点是单词边界。这可以确保您的子域名之前没有单词字符,因此它不再与ail
中的mail
匹配。
匹配
www.example.com
whatever.example.com
而不是
mail.example.com
in.example.com
<强>更新强>
^
锚点可能是更好的选择。这将匹配字符串的开头。
^(?!mail|in).+\.example.com
对于您的示例,它没有任何区别,但如果您的URL以非单词字符开头,那么单词边界就会出错。