我有以下php正则表达式,用于从html页面中选择/提取纯文本电子邮件:
/(^[^<s? input ].*)(?<=[^wd+_.:-])(?:[-!#$%&*+/=?^_`.{|}~wx80-xFF]+|".*?")@(?:[-a-z0-9x80-xFF]+(?:.[-a-z0-9x80-xFF]+)*.[a-z]+|[[d.a-fA-F:]+])(?!(?>[^<]*(?:<(?!/?ab)[^<]*)*)</a>)/i
问题是,它还从value="somemail@something.com"或占位符='somemail@someserver.org我不想那样。因此,我尝试修改/增强它,以便排除这些属性。
以下句子可以:
<p>hello my name is etsefefsda@gmail.com and thats it.</p>
以下四项应排除在选择之外(注意等号后有单引号、双引号和无引号):
<p data-email='an_email@here.com'
<input value="someone@yahoo.co.uk"
<input placeholder="someone@preosmail.com"
<input placeholder=someone@servermail.com
有什么想法吗?
提前感谢
假设一封有效的电子邮件从未出现在未关闭的<
之后,请尝试以下变体:
<[^>]+@(*SKIP)(*FAIL)|@
解释
<[^>]+
查找后面没有>
的<
@
查找@
-
(*SKIP)(*FAIL)
YES不应通过。"YE"表示未关闭标签内的电子邮件。 -
|@
查找任何正确的电子邮件地址。- 您应该用正则表达式替换
@
符号来查找电子邮件。我把它作为占位符放在这里
- 您应该用正则表达式替换