正则表达式获取拆分邮件部分preg_match_all

时间:2015-04-14 06:26:46

标签: php regex

我有像这样的常规爆发

$regex = '/(^info@)|(@onemore\.com)|(^someother@)|(@spam\.com)/i';

我需要在电子邮件字符串中获取所有匹配项: 例如:

如果我有这样的电子邮件:

info@spam.com
preg_match_all($regex, 'info@spam.com', $matches);

应该返回一个带

的数组
1) info@
2) @spam.com

但它只返回info@匹配

如果我这样做,还有一个例子:

preg_match_all($regex, 'someother@spam.com', $matches);

结果应包含

1)someother@
2)@spam.com

有更多组合,但这是预期的结果。 有什么建议吗?

1 个答案:

答案 0 :(得分:3)

使用正向前瞻断言来进行重叠匹配。

(?=^(.*@))|(@.*)

DEMO

如果你想要一个特定的解决方案,那么你可以使用它,

(?=^((?:info|someother)@))|(@spam\.com$)

从组索引1和2中抓取第一和第二部分。

DEMO