PHP字符串函数,用于获取数组字符串值中字符串的特定行
我想在数组字符串值中获取字符串的特定行。示例:(Avelino Curato)avelinocurato@gmail.com。在这个示例字符串中,我只想获取字符串的电子邮件地址部分。我尝试过使用explode函数,但我不希望它将字符串存储在数组的括号中,因为我不再使用它了。我尝试使用strtok,但当字符串看起来像这样时,strtok函数似乎可以完美地工作->avelinocurato@gmail.com(Avelino Curato)。如何利用strtok函数获取字符串值中字符串的电子邮件地址部分(Avelino Curato)avelinocurato@gmail.com?如果不是,我将使用什么其他字符串函数来处理这个问题? 这是我的代码及其相应的输出PHP字符串函数,用于获取数组字符串值中字符串的特定行,php,string,codeigniter,strtok,Php,String,Codeigniter,Strtok,我想在数组字符串值中获取字符串的特定行。示例:(Avelino Curato)avelinocurato@gmail.com。在这个示例字符串中,我只想获取字符串的电子邮件地址部分。我尝试过使用explode函数,但我不希望它将字符串存储在数组的括号中,因为我不再使用它了。我尝试使用strtok,但当字符串看起来像这样时,strtok函数似乎可以完美地工作->avelinocurato@gmail.com(Avelino Curato)。如何利用strtok函数获取字符串值中字符串的电子邮件地址
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);
}
我将如何能够使用strtok仅仅获得电子邮件地址的一部分?如果没有,我可以使用什么其他字符串函数来实现此功能?非常感谢
$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:字符串标记化是。。。不是为你所做的!保持生活简单,学习正则表达式
^试试这个正则表达式非常棒。
PS:字符串标记化是。。。不是为你所做的!保持你的生活简单,学习正则表达式,试试下面的代码
$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);
试试这个代码
$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);
试试我的小例子
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);
}
试试我的小例子
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);
}
[[]]
对于第二个示例,您不需要使用strok()
,因为您想要得到括号后面的内容,所以您可以使用strstr()
来获得括号及其后面的任何内容,然后从字符串中切掉括号
如果你想有创意,你可以这样做:
$val = '(Avelino Curato)avelinocurato@gmail.com';
//$val = 'avelinocurato@gmail.com(Avelino Curato)';
$email = strip_tags(strtr($val, '()', '<>'));
echo $email; // avelinocurato@gmail.com
$val=”(Avelino Curato)avelinocurato@gmail.com';
//$val='1avelinocurato@gmail.com(Avelino Curato)“;
$email=strip_标签(strtr($val,,(),'');
echo$email;//avelinocurato@gmail.com
[[]]
这将在两种情况下都有效,并且不需要PHP使用正则表达式引擎。它基本上将开始和结束括号转换为开始和结束尖括号,然后将其视为HTML标记,然后运行strip标记将删除该部分。简单、快速、易懂
[[]]
对于第二个示例,您不需要使用strok()
,因为您想要得到括号后面的内容,所以您可以使用strstr()
来获得括号及其后面的任何内容,然后从字符串中切掉括号
如果你想有创意,你可以这样做:
$val = '(Avelino Curato)avelinocurato@gmail.com';
//$val = 'avelinocurato@gmail.com(Avelino Curato)';
$email = strip_tags(strtr($val, '()', '<>'));
echo $email; // avelinocurato@gmail.com
$val=”(Avelino Curato)avelinocurato@gmail.com';
//$val='1avelinocurato@gmail.com(Avelino Curato)“;
$email=strip_标签(strtr($val,,(),'');
echo$email;//avelinocurato@gmail.com
[[]]
这将在两种情况下都有效,并且不需要PHP使用正则表达式引擎。它基本上将开始和结束括号转换为开始和结束尖括号,然后将其视为HTML标记,然后运行strip标记将删除该部分。简单、快速且易于理解。您可以在不同的变量中使用名称和电子邮件。我已经得到了电子邮件添加部分,给出了这个示例字符串=>avelinocurato@gmail.com(Avelino Curato)。问题在于此字符串值=>(Avelino Curato)avelinocurato@gmail.com. 无论如何,谢谢你的帮助。哦,很抱歉我没注意到你可以在不同的变量中包含姓名和电子邮件。我已经得到了电子邮件添加部分,给出了这个示例字符串=>avelinocurato@gmail.com(Avelino Curato)。问题在于此字符串值=>(Avelino Curato)avelinocurato@gmail.com. 不管怎样,谢谢你的帮助。哦,对不起我的疏忽哇。谢谢你。简单又干净。哇,谢谢你。简单明了的方法。我已经得到了电子邮件添加部分,给出了这个示例字符串=>avelinocurato@gmail.com(Avelino Curato)。问题在于此字符串值=>(Avelino Curato)avelinocurato@gmail.com. 无论如何,谢谢你的帮助。@Avelino帮你修好了。如果其中一个失败,请尝试翻转:)如果您打算使用一个regex来执行此操作,它会比较慢,并且您确实不应该使用它,除非您需要复杂的模式匹配,而PHP的字符串函数无法轻松完成,那么您应该使用
preg\u replace('/\([^]+\)/','',$str)
只需去掉括号部分,就可以将电子邮件留下。这两种情况都适用。请看,我已经收到了电子邮件添加部分,给出了以下示例字符串=>avelinocurato@gmail.com(Avelino Curato)。问题在于此字符串值=>(Avelino Curato)avelinocurato@gmail.com. 无论如何,谢谢你的帮助。@Avelino帮你修好了。如果其中一个失败,请尝试翻转:)如果您打算使用一个regex来执行此操作,它会比较慢,并且您确实不应该使用它,除非您需要复杂的模式匹配,而PHP的字符串函数无法轻松完成,那么您应该使用preg\u replace('/\([^]+\)/','',$str)
只需去掉括号部分,就可以将电子邮件留下。这两种情况都适用。看见