将选定的格式从html与纯文本匹配

时间:2014-12-16 05:04:56

标签: regex email parsing mailgun

我使用Mailgun的真棒Inbound Routing来解析我收到的电子邮件,删除HTML和电子邮件签名,这留给我原始文本。

以下是返回内容的一个小例子:

{
  "stripped-html": "<html><body><div style=\"font-family: Helvetica; font-size: 13px;\">Testing with <b>bold<\/b>&#160;and <u>stuff<\/u><br><\/div><div style=\"font-family: Helvetica; font-size: 13px;\"><u><br><\/u><\/div><div style=\"font-family: Helvetica; font-size: 13px;\">:)<\/div>&#13;\n                <div><div><br><\/div><div>--&#160;<\/div><div>Tim Smith<\/div><div><br><\/div><\/div>&#13;\n                 &#13;\n                <p style=\"color: #A0A0A8;\"><\/p>&#13;\n                <div>&#13;\n                    <br><\/div><\/body><\/html>",
  "stripped-text": "Testing with bold and stuff\n\n:)",
  "stripped-signature": "-- \nTim Smith"
}

我想要做的是使用普通stripped-text,但也复制基本格式,如粗体,斜体和下划线。在这个例子中,单词&#34; bold&#34;是大胆和世界&#34;东西&#34;加下划线。

解决这个问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

我会使用“stripped-html”字符串并清理它,这样你就可以摆脱逃脱字符串...

...那么你可以做两件事:

  1. 运行与样式匹配的正则表达式并忽略所有其他内容。 虽然后两者因HTML4而被弃用,并被替换为粗体和css样式属性(font-style:italic)。 例如: 首先,您将外部html与(<\w* \w*=".*?">)(.*)(<\/\w*>)匹配 然后递归地查找粗体和其他元素,例如<b>(.*?)</b>,用于没有其他属性的b标签。
  2. 用粗体替换所有b标签后,您可以直接转到下一个标签。

    1. 使用解析器 - 例如,如果您想使用PHP,http://simplehtmldom.sourceforge.net/可能是一个好的开始。