我正在使用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
如果没有值,如何修改正则表达式以使其在行尾停止?
答案 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]*)