正则表达式查找跟随关键字的电子邮件地址

Regex to find email addresses that follow a keyword

我正在尝试在后跟关键字的文本中查找电子邮件 'email'

preg_match_all("/(email<=)(\S+@\S+)/im", $input_lines, $output_array);

我的输入数据是

here is some text
that does not hi_there@welcome.co
but this email should be captured yes@well.com

因此应该捕获第 3 行中的电子邮件

正则表达式:/email.+?\b(\S+@\S+)/i

Working Example

在php中:

preg_match_all("/email.+?\b(\S+@\S+)/i", $input_lines, $output_array);

$output_array[1] 现在将包含您的电子邮件地址

我删除了 m 标志 - 因为这改变了 $^ 未被使用的工作方式。

细目如下:

  • email 这只匹配文本 email- 最后一个 / 之后的 i 使其不关心大小写
  • .+? 将匹配换行以外的任何字符一次或多次,但匹配的字符越少越好,参见 Regex Laziness
  • \b 将匹配单词边界 - 即单词字符和非单词字符之间 - 参见 Word boundaries
  • ( 开始一个捕获组 - 因为这是第一个,这就是它在 $output_array[1] 中找到的原因,如果你有第二个,任何匹配项都会在 $output_array[2]
    • \S+ 匹配任何非空格的内容一次或多次
    • @ 匹配'@'字符
    • \S+ 匹配任何非空格的内容一次或多次
  • ) 这将关闭捕获组

我们可以就 \S@\S 是否是匹配电子邮件地址的最佳方式展开激烈辩论 - 我认为它足以满足此目的,但如果您想深入了解,请参阅此处: Using a regular expression to validate an email address