我想在数组字符串值中获取字符串的特定行。示例:(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);
}
输出:
上面的输出是我想得到的结果,但是我如何能够获得具有此数组字符串值的相同输出?
$val = array(
'0' => '(Avelino Curato)avelinocurato@gmail.com',
'1' => '(Ferdinand Balbin)ferdinand2apploma.com'
);
如何才能使用strtok获取电子邮件地址部分?如果没有,我可以使用什么其他字符串函数?非常感谢
答案 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);
}