我正在使用Postfix MTA并从破损的MTA(我无法解决,因为它不在我的控制范围内)获取重要邮件,它以下列格式发送:
RCPT TO: <+49 (681) 12345678>
我需要的是:
RCPT TO: 4968112345678
所以我正在寻找一个正则表达式,首先检查字符串是否以“RCPT TO:”开头,如果这是真的,则需要删除其后的所有特殊字符,以便只有[a-zA-Z0-剩下9个。
Postfix为此类正则表达式提供了一个示例:
# Work around clients that send RCPT TO:<'user@domain'>.
# WARNING: do not lose the parameters that follow the address.
#/^RCPT\s+TO:\s*<'([^[:space:]]+)'>(.*)/ RCPT TO:<$1>$2
但几个小时后我无法适应我的需要。
提前致谢, 马可
答案 0 :(得分:2)
似乎是,在通用情况下不可能剥离任何非字母数字字符的组合。但对于像示例中给出的地址,这个正则表达式应该足够了:
/^[^a-z0-9]*([a-z0-9]+)[^a-z0-9]*([a-z0-9]+)[^a-z0-9]*([a-z0-9]+)$/ $1$2$3
您可以通过postmap命令测试正则表达式映射:
$ postmap -q "+49 (681) 12345678" pcre:/path/to/regexp_map
4968112345678
要使用此正则表达式映射,请添加到postfix config
canonical_maps = prce:$config_directory/regexp_map
阅读有关canonical_maps的ADDRESS_REWRITING_README。
答案 1 :(得分:1)