如何获取字符串中某个字符(在我的情况下为“@”)之后的值?我有这个代码,但它不起作用;将只有字母数字字符和/或空格。
$data = 'Someone @Will Be There';
preg_match ("/@([a-zA-Z0-9 ]*)/", $data, $match);
return $match [0];
如果字符串中存在@,我只想得到“将在那里”。
谢谢
编辑:非常抱歉我的错误。我不想删除那个'@',我需要在那之后得到什么。再次对不起,人们。
更改了我的代码以反映您的更改...
$data = 'Someone @Will Be There';
$character = '@';
if ($string = stringAfterCharacter($data, $character)){
echo $string;
}else{
echo "Character: '$character' not found.";
}
function stringAfterCharacter($data, $character='@'){
if (($pos = strpos($data, $character)) !== false){
return substr($data, $pos + 1);
}else{
return false;
}
}
您可以strpos()
为此目的使用该功能。它在字符串中搜索子字符串 - 或至少是一个字符 - 并返回该子字符串的第一个位置。
$position = strpos('I am @ the penthouse', '@');
当在字符串中找不到子字符串时,该方法返回 false。
strpos()
php 中存在一些常见的陷阱。检查以下示例:
if(!strpos('@stackoverflow', '@')) {
echo 'the string contains no @';
}
尽管字符串包含 at ,但将输出“@”未找到。那是因为 PHP 中的弱数据类型。上一个strpos()
调用将返回 int(0),因为它是字符串中的第一个字符。但这将使 if 失败,除非您这样做:
if(strpos('@stackoverflow', '@') === FALSE) {
echo 'the string contains no @';
}
最好可以使用简单的字符串替换方法试试这个,
$data = 'Someone @Will Be There';
$result = str_replace('@','',$data); // result is: Someone Will Be There
不要使用这个:
//preg_match ("/@([a-zA-Z0-9]*)/", $data, $match);
//return $match [0];
您不需要使用通常很慢的正则表达式来执行此操作。只需这样做: return str_replace('@', '', $data);
这将从字符串中删除任何符号
$data = 'Someone @Will Be There';
echo preg_replace("/([^A-Za-z0-9 ]*)/", '', $data); //Add character in the pattern if not to be filtered
输出:
Someone Will Be There
你的问题似乎模棱两可,如果你想从字符串中删除'@',那么你可以使用 str_replace 的答案。如果您想要 '@' 之后的值,您应该在自己的代码中检查 $match[1]。
第一组在$match[1]
,不在$match[0]
将您的代码更改为:
$data = 'Someone @Will Be There';
preg_match ("/@([a-zA-Z0-9 ]*)/", $data, $match);
return $match[1];