我做了谷歌研究。我已经尝试了preg_match,strsub_replace,几乎所有的东西。
老实说,我似乎无法弄清楚如何抓住与角色相关的单词。
我的网站上有状态系统。我试图弄清楚如果一个单词中有一个字符'@',如何用其他东西替换一个单词...就像在twitter上,当你说'@person'时。
非常感谢任何帮助。
答案 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);
?>
匹配字符串中的所有模板。