正则表达式查找跟随关键字的电子邮件地址
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
在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
我正在尝试在后跟关键字的文本中查找电子邮件 '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
在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