增强php正则表达式,使其不包含特定html属性中的值



我有以下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"表示未关闭标签内的电子邮件。

  • |@查找任何正确的电子邮件地址。

    • 您应该用正则表达式替换@符号来查找电子邮件。我把它作为占位符放在这里

最新更新