0

我想匹配字符串中的邮件地址。那没问题。但出于任何原因,我无法排除特殊的 html 标签和属性。

我的邮件正则表达式:

[!#\$%&'\*\+\-\/0-9=\?a-z\^_`\{\}\|~]*(?:\\[\x00-\x7F][!#\$%&'\*\+\-\/0-9=\?a-z\^_`\{\}\|~]*)*(?:\.[!#\$%&'\*\+\-\/0-9=\?a-z\^_`\{\}\|~]*(?:\\[\x00-\x7F][!#\$%&'\*\+\-\/0-9=\?a-z\^_`\{\}\|~]*)*)*@[a-z0-9](?:[a-z0-9-]*[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)*\.[a-z]{2,}

现在,如果邮件地址在输入字段中,我不想匹配:

<input type="xxx" value"foo@bar.tld">

我也不想匹配,如果它在标题标签中

<title>foo@bar.tld

也不包含在<styleand<script

我尝试了这个前瞻性的东西,但我产生了非法的正则表达式,或者它不起作用。

4

1 回答 1

0

一个正则表达式将无法以您想要的方式同时排除和包含。

如果您的目标文档是格式正确的 XML,那么您可以使用一个或多个正则表达式来查找并用空字符串替换标签,然后使用您的工作正则表达式在剩下的任何文本中查找邮件地址。

但是,如果您的目标是 XML 文件,我必须同意 Bohemian 的观点,即 XML 解析器是最好的方法。XML 既复杂又灵活,在设计替换为空字符串的正则表达式(例如 CDATA 和注释块)时,您总是有可能遇到您忘记的功能的文件。最好坚持使用经过设计和测试的解析器,以便通过 XML 运行并逐部分提取文档。

如果您的目标文档是 XML 解析器无法读取的不规则 HTML,那么您可能必须尝试使用​​ replace-then-search 方法。

于 2013-03-27T20:28:26.670 回答