Aweber正则表达拼图

时间:2012-09-26 17:03:54

标签: regex parsing email puzzle

我正在使用Aweber的自动电子邮件解析来进行Unbounce表单提交,看起来他们的默认正则表达式有点不对劲:

他们将电子邮件与\nemail:\s+(.+?)\n匹配,并将名称与\nname:\s+(.+?)\n

匹配

问题是因为我不是要求用户提供他们的名字,他们的正则表达式会自动抓取下一行,这是===== FORM DATA =====,所以它通过“Hi ==”向用户发送电子邮件===表格数据=====!“

以下是Unbounce电子邮件的示例:

page_name:
page_id: 2b78ddde-e7bb-11e1-9fde-12313e00ec56
page_url: http://www1.sample.com
variant: C
email: sample@gmail.com
name:

===== FORM DATA =====

email: ["sample@gmail.com"]
ip_address: 88.253.**.**



--
The Unbounce Team
Toll Free 1-888-515-9161
support@unbounce.com
http://unbounce.com

如果没有值,如何修改正则表达式以使其在行尾停止?

2 个答案:

答案 0 :(得分:2)

将名称正则表达式更改为以下内容:

\nname:[ \t]+(.+?)\n

此处的更改是将\s替换为[ \t],因为\s将匹配换行符。

如果没有提供名称,这将导致匹配失败,如果您希望它仍然匹配但是将空字符串放入组中,您可以使用以下内容:

\nname:[ \t]*(.*?)\n

如Evandro Silva所述,您可以将.+?.*?分别替换为[^\n]+[^\n]*,从而提高此正则表达式的效率。

答案 1 :(得分:0)

尝试使用正则表达式[\n\r]name:[^\S\n\r]*([^\n\r]*)