2012-01-07 52 views
1

試圖匿名用於從認證後綴用戶中繼消息中接收的標頭,有一個從https://we.riseup.net/debian/anonymizing-postfix一個例子:如何將正則表達式從PCRE轉換爲POSIX格式,它警告重複運算符操作數無效?

/^Received: from (.* \([-._[:alnum:]]+ \[[.[:digit:]]{7,15}\]\)).*?([[:space:]]+).*\(Authenticated sender: ([^)]+)\).*by (auk\.riseup\.net) \(([^)]+)\) with (E?SMTPS?A?) id ([A-F[:digit:]]+).*/ REPLACE Received: from [127.0.0.1] (localhost [127.0.0.1])$2(Authenticated sender: $3)${2}with $6 id $7 

當編輯文件regexp:/etc/postfix/header_checks結果的錯誤消息:

線15:重複 - 操作符操作數無效

現在我的猜測是上述正則表達式是PCRE格式,其中我的Postfix請求POSIX兼容正則表達式。

如何使上述正則表達式POSIX regexp兼容在Postfix header_checks文件中使用?

回答

2

您的預感是正確的,.*?是一個PCRE構造:.*是正常的「任何字符,儘可能多的次數,至少爲零次」,並且尾隨問號改變爲「... ...的幾倍可能......「。 SUSv4說:

多個相鄰複製符號('+','*','?'和區間)的行爲會產生未定義的結果。

我沒有研究過的模式太多,但你應該能夠解決這個特殊的不兼容:下一個子模式是([[:space:]]+),所以你應該能夠重新制定爲「任何非空間字符...「:

[^[:space:]]*([[:space:]]+) 

或者可能只是通過省略問號來擺脫問題。畢竟,太空食物之後是另一個.*

+0

謝謝@just_somebody這有幫助。測試工作POSIX正則表達式:對於後綴成爲'/^Received:from(。* \([-._ a-zA-Z0-9] + \ [[。0-9] {7,15} \] \ )(。* [[:space:]] +)\(Authenticated sender:([^)] +)\)(。*)by(host \ .domain \ .tld)\(([^)] + (*))\ REPLACE Received:from [127.0.0.1](localhost [127.0.0.1])$ ​​2(Authenticated發件人:$ 3)$ {4}減$ 5($ 6),$ 7 id $ 8 $ 9' – 2012-01-10 15:01:24

相關問題