2011-10-04 72 views
1

我正在爲定義其虛擬域映射的Postfix編寫正則表達式。我想要捕獲除了兩個域的所有子域。如何在正則表達式中使用if-then?

假設我的域名是example.com和兩個排除子域是,郵件的,我寫了下面的正則表達式:

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

它應該認識到whatever.example。 com但不是in.example.commail.example.com

它在RegExr中工作,但它在Postfix和Ruby中不起作用。我假設我使用if-then錯誤,那麼正確的語法是什麼?還有其他選擇嗎?

+1

據我所知,Ruby不支持條件正則表達式。不確定Postfix。比較表:http://www.regular-expressions.info/refflavors.html – eldarerathis

+0

你不需要if/then,只是一個負面的lookahead。語法幾乎完全相同,所以我不知道Postifx是否更有可能識別它,但值得一試:'(?!mail | in)。+ \。example.com' – Chriszuma

+0

@Chriszuma謝謝,但在這種情況下,它承認* ail.example.com *。 – arikfr

回答

1

如果您使用錨點,那麼它應該工作。

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

看到它here on Rubular

之初\b錨是一個字邊界。這可以確保您的子域名之前有非單詞字符,因此它不再與mail中的ail匹配。

這符合

www.example.com
whatever.example.com

,而不是

mail.example.com
in.example.com

UPDATE

也許^錨這裏是更好的選擇。這將匹配字符串的開始。

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

對於您的示例,它沒有區別,但是如果您的URL以非單詞字符開頭,那麼它將與單詞邊界錯誤。

+0

看起來Postfix不支持你在這裏使用過的正則表達式特徵之一,但是我的問題不是Posfix特有的,你也沒有打算解釋它,所以我接受它。謝謝! – arikfr