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

发布于 2024-12-07 21:44:38 字数 436 浏览 0 评论 0原文

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

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

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

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

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

I'm writing a regular expression for Postfix that defines its virtual domains map. I want to catch all subdomains of a domain except for two.

Assuming my domain is example.com and the two exclusion subdomains are in,mail, I wrote the following regular expression:

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

It supposed to recognize whatever.example.com but not in.example.com or mail.example.com.

It does work in RegExr, but it doesn't work in Postfix nor Ruby. I'm assuming that I'm using if-then wrong, what is the correct syntax? Are there other options?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

≈。彩虹 2024-12-14 21:44:38

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

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

请参阅 Rubular 上的此处

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

这匹配

www.example.com
无论如何.example.com

而不是

mail.example.com
in.example.com

更新

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

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

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

If you use an anchor, then it should work.

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

See it here on Rubular

The anchor at the beginning \b is a word boundary. This assures that there is non word character before your subdomain and therefor it does not match ail from mail anymore.

This matches

www.example.com
whatever.example.com

and not

mail.example.com
in.example.com

UPDATE

Probably the ^ anchor is the better choice here. This would match the start of the string.

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

For your examples it makes no difference, but if your URL starts with a non-word character then it would be wrong with the word boundary.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文