Php 从一个角色身上抓取一个词?

Php 从一个角色身上抓取一个词?,php,Php,我已经做了谷歌搜索。我试过了预赛,替补赛,几乎所有的比赛 老实说,我似乎不知道如何抓住一个字,是连接到一个字符 我的网站上有一个状态系统。我想知道如果一个单词中有“@”字符,如何用其他单词替换它。。就像在推特上,当你说“@person” 非常感谢您的帮助。仅打印匹配项: preg_match_all("/@([0-9a-z]+)/i",$input,$matches); print_r($matches[1]); 要替换它们: $input = preg_replace('/@([0-9a-z

我已经做了谷歌搜索。我试过了预赛,替补赛,几乎所有的比赛

老实说,我似乎不知道如何抓住一个字,是连接到一个字符

我的网站上有一个状态系统。我想知道如果一个单词中有“@”字符,如何用其他单词替换它。。就像在推特上,当你说“@person”

非常感谢您的帮助。

仅打印匹配项:

preg_match_all("/@([0-9a-z]+)/i",$input,$matches);
print_r($matches[1]);
要替换它们:

$input = preg_replace('/@([0-9a-z]+)/i','-->\1<--',$input);
$input=preg_replace('/@([0-9a-z]+)/i','-->\1我建议您帮助您找出表达式。在解释问题时,您希望找到一个以“@”开头,后跟字符的元素

<?php

$isMatches =preg_match_all("/^@.+$/", $stringToSearch, $matches);

?>


将匹配字符串中的所有模板。

如果您尝试匹配,则所有答案都很好,如果您尝试替换,我将这样做:

$string = "some text @person some other text 
 some @pers
 @pess text";
var_dump(preg_replace('/@.*\s/i', '#replacement#', $string));
其中“#replacement#”是替换以“@”开头、以空格结尾的所有单词的字符串


编辑,以使代码在所有情况下都能工作(不要替换电子邮件,不要替换@mvdc所指的空格,替换以“特殊字符”开头的单词,使用@mvdc所述的U),这应该在所需的情况下工作

$string = "some text @person some other text\n
 some @pers\n
 @pess text email@google.com the email should not be replaced ,\n
 @!11@21ss should be replaced , whitespaces not and \\n not";
var_dump(preg_replace('/\s\@.*\s/U', ' #replacement# ', $string));
exit;

编辑,第4次修订

  $string = "@sasa32@ some text @person some other text@3232##!@ this can pass as an email
 some @pers\n
 @pess text email@google.com the email should not be replaced ,\n
 @!11@21ss should be replaced , whitespaces not and \\n not @poelinca!";
var_dump(preg_replace('/(\s|^|\A)\@.*(\s|\Z|$)/U', ' #replacement# ', $string));
exit;

在PHP中,正则表达式是普通字符串。是的,我处于JavaScript模式;)-1这将只匹配以
@
开头的字符串,后跟任何字符串。放下
^
并用
[a-z]
替换
。它显示了人们用“@”写的所有名字。。但是,我需要替换在状态中找到的所有名称。。我如何获取结果的substr(有两个参数)?你的确切意思是什么?请提供示例输入和相关输出。请稍候。你提供的脚本有效。我只需要将文本替换为,例如:Person。。您使用的方法怎么可能做到这一点?@mvds:既然您否决了我的问题,请用这个字符串测试您的代码,看看是否有替换内容:“some text@123asb text”;请修改您的答案。@poelinca已修复。请明天复习你自己的答案。你能告诉我你为什么给我a-1吗?代码没有做它应该做的吗?这将失败,因为
*
也将匹配空白。要么将
更改为
[a-z]
,要么添加
U
修饰符,这样
*
就不会贪婪。不过,匹配
@.*\s
是个坏主意,因为它与“some text@person”不匹配,因为“@person”后面没有空格。@mvds:您是舒尔的发言人吗,以下是我对它的解释(我有12张jagermaister的照片):““将匹配任何东西,而不仅仅是a-z,也许我的单词以数字开头。。。或一个“$”字符;“*”将匹配“0或更多+”,而“+”将匹配“1或更多+”,因此在这里差别不大,“\s”将在第一个“空白”处停止匹配。如果我的正则表达式出现了错误,为什么它会替换我作为示例提供的字符串中的所有“@words”,请进行测试并查看它的工作情况。我相信mvds的要点是,它不仅会接受空格(实际上不会接受空格,因为您的\s标志),而且会接受特殊字符,这些字符最有可能(尽管问题中没有说明)禁止在网站上使用用户名。如果你有“生日快乐@poelinca!”,你就不会想要!在用户名上被抓到。