1

我的一个正则表达式有问题;如果你能帮助我 :

<?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  
   )

如果你们中的任何人可以帮助我,我会很高兴

谢谢 !

4

3 回答 3

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
        )

)
于 2012-10-31T11:06:51.757 回答
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);
    ?>
于 2012-10-31T11:13:04.233 回答
-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";
于 2012-10-31T11:07:17.967 回答