0

如何获取字符串中某个字符(在我的情况下为“@”)之后的值?我有这个代码,但它不起作用;将只有字母数字字符和/或空格。

$data = 'Someone @Will Be There';

preg_match ("/@([a-zA-Z0-9 ]*)/", $data, $match);
return $match [0];

如果字符串中存在@,我只想得到“将在那里”。
谢谢

编辑:非常抱歉我的错误。我不想删除那个'@',我需要在那之后得到什么。再次对不起,人们。

4

7 回答 7

1

更改了我的代码以反映您的更改...

$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;
    }
}
于 2013-01-09T05:48:50.263 回答
0

您可以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 @';
}
于 2013-01-09T05:42:50.860 回答
0

最好可以使用简单的字符串替换方法试试这个,

$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];
于 2013-01-09T05:43:52.940 回答
0

您不需要使用通常很慢的正则表达式来执行此操作。只需这样做: return str_replace('@', '', $data);

于 2013-01-09T05:45:07.053 回答
0

这将从字符串中删除任何符号

$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
于 2013-01-09T06:01:22.093 回答
0

你的问题似乎模棱两可,如果你想从字符串中删除'@',那么你可以使用 str_replace 的答案。如果您想要 '@' 之后的值,您应该在自己的代码中检查 $match[1]。

于 2013-01-09T06:26:12.420 回答
0

第一组在$match[1],不在$match[0]

将您的代码更改为:

$data = 'Someone @Will Be There';
preg_match ("/@([a-zA-Z0-9 ]*)/", $data, $match);
return $match[1];
于 2013-01-09T09:40:03.387 回答