Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP提取字符串后@_Php_Mysql_Preg Match All - Fatal编程技术网

PHP提取字符串后@

PHP提取字符串后@,php,mysql,preg-match-all,Php,Mysql,Preg Match All,我需要一个PHP函数来提取@ 例如,在Facebook上,如果您写入@username,用户名将自动替换为配置文件URL。我想做一些类似的事情,检测@username,看看数据库中是否存在username,若存在,那个么脚本将返回他的个人资料URL。我知道检查数据库中是否存在用户名并生成配置文件URL,但我不知道如何从字符串中检测@username(也可以是同一字符串上的@username1、@username2等)。如果你能给我举个例子或者给我一个函数,我会非常感激。谢谢大家! 如果您确定“@

我需要一个PHP函数来提取@
例如,在Facebook上,如果您写入@username,用户名将自动替换为配置文件URL。我想做一些类似的事情,检测@username,看看数据库中是否存在username,若存在,那个么脚本将返回他的个人资料URL。我知道检查数据库中是否存在用户名并生成配置文件URL,但我不知道如何从字符串中检测@username(也可以是同一字符串上的@username1、@username2等)。如果你能给我举个例子或者给我一个函数,我会非常感激。谢谢大家!

如果您确定“@”在字符串中只出现一次,那么您可以使用php函数跳过第一个字符,并保留其余字符。或者使用str_replace()替换字符串中的“@”。但是如果有可能在字符串中获取多于“@”的符号,那么您可能可以使用explode()表示“@”,并仅获取所有字符串。但是是的,您必须检查您将收到的数组中的验证。

未经测试,但是正则表达式替换为
(@[A-Za-z0-9]{1,})

查找任意字符A-z0-9(通常被接受为用户名)

$text=preg\u replace\u回调(
“@([A-Za-z0-9]{1,})”,
函数($matches){
返回“”;
},
$text
);
更新

根据注释,您可以使用

preg_match_all('@([A-Za-z0-9]{1,})$text,$matches)


这将返回一个多维数组,其中
$matches[0]
为原始文本,
$matches[1]
为找到的名称数组(减号)

查找用户名的有效字符是什么?我使用此函数验证用户名:preg_match([a-zA-Z]{4,16})([a-zA-Z][a-zA-Z0-9{4,16})$/I“,$login)为什么不
preg_replace('/(@[A-Za-z0-9]{1,})/',''$text)?谢谢,但我需要提取数组中的所有用户名,然后我将使用此数组逐个验证和检查,以查看数据库中是否存在用户名。如果存在,我将生成一个URL,如果不存在,我将保持原样。问题是我不知道如何从字符串中提取所有这些用户名。@Amal您可以这样做,但通过提供回调
profileURL
可以替换为实际的url@Alexander alternative如果您只需要阵列,请参阅我的更新。
$text = preg_replace_callback(
        '@([A-Za-z0-9]{1,})',
        function ($matches) {
            return '<a href="profileURL">'.$matches[1].'</a>';
        },
        $text
    );