
exim-users at spodhuis
Jun 17, 2008, 2:56 PM
Post #3 of 5
(309 views)
Permalink
|
On 2008-06-17 at 20:53 +0200, Marten Lehmann wrote: > I need to extract the value "X-purgate-ID" from $spam_report: > > X-purgate: Spam > X-purgate-ID: 150741::080616223818-6C9786C0-73CE72D8/2129941411-0/0-3 > X-purgate-Ad: For more information about eXpurgate please visit > http://www.expurgate.net/ > > With real PCRE, the expression would look like this: Exim uses "real" PCRE; Philip Hazel is the original author of both. > .*\nX-purgate-ID: (.*?)\n.* > > whereas $1 would contain the id. Unfortunately, the sg expansion item > does seem to work with newlines. If you double-check the documentation on ${sg ...} then you'll see the reminder: ----------------------------8< cut here >8------------------------------ Because all three arguments are expanded before use, if any $ or \ characters are required in the regular expression or in the substitution string, they have to be escaped. For example: ${sg{abcdef}{^(...)(...)\$}{\$2\$1}} yields "defabc", and ${sg{1=A 4=D 3=C}{\N(\d+)=\N}{K\$1=}} yields "K1=A K4=D K3=C". Note the use of "\N" to protect the contents of the regular expression from string expansion. ----------------------------8< cut here >8------------------------------ Try: ${sg{$spam_report}{\N^.*\n\s*X-purgate-ID: (.*?)\n.*$\N}{\$1}} Note the \s* to match the whitespace you showed above, the \N at each end of the <regex> field and the \$1, so that $1 would be expanded by the regex engine, instead of expanded as an Exim variable passed in to be used in the substitution pattern. That is, it's perfectly fine to use $acl_m_foo as the substitution, Exim expanded that for you; so to use $1 for a regexp, you pass \$1. Regards, -Phil -- ## List details at http://lists.exim.org/mailman/listinfo/exim-users ## Exim details at http://www.exim.org/ ## Please use the Wiki with this list - http://wiki.exim.org/
|