我的一个正则表达式出了问题;如果你可以帮助我:
<?php
$ptn = "/[\S]*[A-Za-z0-9_-]*.*[A-Za-z0-9_-]+@[A-Za-z0-9_-]*.*[A-Za-z0-9_-]*[\S]*/";
$str = "Contact name: Wahyu van Schneppanginen Email: perm@perotozair.com ";
preg_match($ptn, $str, $matches);
print_r($matches);
?>
结果如何:
Array
(
[0] => Email: perm@perotozair.com
)
但我想:
Array
(
[0] => perm@perotozair.com
)
如果有人能帮助我,我会很高兴
谢谢!
答案 0 :(得分:1)
这将有效:
<?php
$ptn = '/[\w\d-]+(?:\.[\w\d-]+)*@[\w\d-]+(?:\.[\w\d-]+)+/';
$str = "Contact name: Wahyu van Schneppanginen Email: perm@perotozair.com bla bla bla xxx@yyy.com";
preg_match_all($ptn, $str, $matches);
print_r($matches);
?>
您的问题是您使用的边界词:[\S]*
。您应该使用\b
。我还通过对某些部分进行分组,简化并改进了您的正则表达式以匹配电子邮件地址。请注意使用preg_match_all()
来匹配字符串中所有出现的电子邮件地址。
<强>输出强>
Array
(
[0] => Array
(
[0] => perm@perotozair.com
[1] => xxx@yyy.com
)
)
答案 1 :(得分:1)
试试这个: -
<?php
$ptn = "/[A-Za-z0-9_-].[A-Za-z0-9_-]+@[A-Za-z0-9_-]*.*[A-Za-z0-9_-]*/";
$str = "Contact name: Wahyu van Schneppanginen Email: perm@perotozair.com ";
preg_match($ptn, $str, $matches);
print_r($matches);
?>
答案 2 :(得分:-1)
为什么不使用爆炸?
$str = "Contact name: Wahyu van Schneppanginen Email: perm@perotozair.com ";
$strArr = explode("Email: ",$str);
if(isset($strArr[1]))
$email = $strArr[1]; //output: perm@perotozair.com
else
echo "Email not found";