2

我想在数组字符串值中获取字符串的特定行。示例:(Avelino Curato)avelinocurato@gmail.com。在此示例字符串中,我只想获取字符串的电子邮件地址部分。我曾尝试使用explode 函数,但我不希望它将字符串存储在数组的括号中,因为我将不再使用它。我尝试使用 strtok,但是当字符串看起来像这样 -> avelinocurato@gmail.com(Avelino Curato)时,strtok 函数似乎可以正常工作。我如何能够利用 strtok 函数来获取此字符串值(Avelino Curato)avelinocurato@gmail.com中字符串的电子邮件地址部分?如果不是我将使用什么其他字符串函数来处理这个?这是我的代码及其相应的输出

function try_explode(){

$store_array = array();
$val = array(
'0' => 'avelinocurato@gmail.com(Avelino Curato)',
'1' => 'ferdinand2apploma.com(Ferdinand Balbin)'

);

for($i=0;$i<sizeof($val);$i++){

  $store_array[$i] = strtok($val[$i],')');

}

var_dump($store_array);
}

输出:

在此处输入图像描述

上面的输出是我想要得到的结果,但是如何在这个数组字符串值到位的情况下获得相同的输出呢?

$val = array(
'0' => '(Avelino Curato)avelinocurato@gmail.com',
'1' => '(Ferdinand Balbin)ferdinand2apploma.com'

);

我如何能够使用 strtok 来获取电子邮件地址部分?如果没有,我可以为此使用什么其他字符串函数?非常感谢

4

4 回答 4

4
$val = '(Avelino Curato)avelinocurato@gmail.com';
$email = ltrim(strstr($val, ')'), ')');

echo $email; // avelinocurato@gmail.com

[[演示]]

对于第二个示例,您不会使用strtok(),因为您想获取括号后面的内容,因此您将使用strstr()获取括号及其后面的任何内容,然后从字符串中删除括号。

如果你想有创意,你可以这样做:

$val = '(Avelino Curato)avelinocurato@gmail.com';
//$val = 'avelinocurato@gmail.com(Avelino Curato)';
$email = strip_tags(strtr($val, '()', '<>'));

echo $email; // avelinocurato@gmail.com

[[演示]]

这在这两种情况下都有效,并且不需要 PHP 使用正则表达式引擎。它基本上将开始和结束括号转换为开始和结束尖括号,然后将其视为 HTML 标记,然后运行条形标记将删除该部分。简单、快速且易于理解。

于 2013-07-04T06:17:58.830 回答
0
$string = 'avelinocurato@gmail.com(Avelino Curato)';
if(preg_match('~^(.+?)\\((.+?)\\)$~', $string, $matches)){
    var_dump(array_map('trim', $matches));
}elseif(preg_match('~^\\((.+?)\\)(.+?)$~', $string, $matches)){
    var_dump(array_map('trim', $matches));
}

^试试这个!正则表达式很棒。

PS字符串标记化......不适合你正在做的事情!让你的生活简单,学习正则表达式

于 2013-07-04T05:58:51.283 回答
0

试试这个代码。

$val = array(
    '0' => '(Avelino Curato)avelinocurato@gmail.com',
    '1' => '(Ferdinand Balbin)ferdinand@apploma.com',
    '2' => 'ferdinand@apploma.com(Ferdinand Balbin)'

);

array_walk($val, function(&$value) { /* Use array walk to loop trough the array */

    $matches = array(); //create array to preserve matches after preg_match

    preg_match('/[A-Za-z0-9_-]+@[A-Za-z0-9_-]+\.([A-Za-z0-9_-][A-Za-z0-9_]+)/', $value, $matches); 

    $value = $matches[0]; //set the [0] match in value
});

print_r($val);
于 2013-07-04T06:08:46.347 回答
0

试试我的小例子

function try_explode(){

    $store_array = array();
    $val = array(
        '0' => 'avelinocurato@gmail.com(Avelino Curato)',
        '1' => 'ferdinand2apploma.com(Ferdinand Balbin)'
    );

    foreach ($val as $key => $value) {
        $names[$key] = preg_replace("/.*\(([^\)]+)\)$/is", "\$1", $value);
        $emails[$key] = preg_replace("/^([^\(]+).*/is", "\$1", $value);
        $store_array[$key] = "(".$names[$key].") ".$emails[$key];
    }
    var_dump($names);
    var_dump($emails);
    var_dump($store_array);
}
于 2013-07-04T06:11:00.780 回答