PHP字符串函数在数组字符串值中获取字符串的特定行

时间:2013-07-04 05:54:07

标签: php string codeigniter strtok

我想在数组字符串值中获取字符串的特定行。示例:(Avelino Curato)avelinocurato@gmail.com 。在这个示例字符串中,我想只获取字符串的电子邮件地址部分。我尝试过使用explode函数,但我不希望它将字符串存储在数组中的括号中,因为我不再使用它了。我尝试使用strtok,但当字符串看起来像这样时,strtok函数似乎工作得很好 - > avelinocurato@gmail.com(Avelino Curato)。我如何利用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);
}

输出:

enter image description here

上面的输出是我想得到的结果,但是我如何能够获得具有此数组字符串值的相同输出?

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

);

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

4 个答案:

答案 0 :(得分:4)

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

echo $email; // avelinocurato@gmail.com

[[DEMO]]

对于第二个例子,你不会使用strtok()因为你想得到括号之后的内容,所以你要用strstr()得到括号及其后面的任何内容,然后你砍掉了字符串中的括号。

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

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

echo $email; // avelinocurato@gmail.com

[[DEMO]]

这适用于两个情况,并且不需要PHP使用正则表达式引擎。它基本上将开括号和右括号转换为打开和关闭尖括号,然后将其视为HTML标记,然后运行条带标记将删除该部分。简单,快速,易于理解。

答案 1 :(得分: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 字符串标记化是...不适用于您正在做的事情!让您的生活变得简单,学习 RegEx

答案 2 :(得分: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);

答案 3 :(得分: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);
}