从角色中抓取一个字?

时间:2011-01-08 02:44:27

标签: php

我做了谷歌研究。我已经尝试了preg_match,strsub_replace,几乎所有的东西。

老实说,我似乎无法弄清楚如何抓住与角色相关的单词。

我的网站上有状态系统。我试图弄清楚如果一个单词中有一个字符'@',如何用其他东西替换一个单词...就像在twitter上,当你说'@person'时。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

只打印匹配:

preg_match_all("/@([0-9a-z]+)/i",$input,$matches);
print_r($matches[1]);

替换它们:

$input = preg_replace('/@([0-9a-z]+)/i','-->\1<--',$input);
作为示例,

@text替换为-->text<--

答案 1 :(得分:0)

如果您尝试匹配,所有答案都很好,如果您尝试替换,我会如何做到这一点:

$string = "some text @person some other text 
 some @pers
 @pess text";
var_dump(preg_replace('/@.*\s/i', '#replacement#', $string));

其中“#replace#”是替换以“@”开头并以空格结尾的所有单词的字符串。


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

$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;

答案 2 :(得分:-1)

我建议RegexPal帮助您弄清楚表达方式。解释您的问题,您希望找到一个以“@”开头,后跟字符......

的元素
<?php

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

?>

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