所以,我想这是一个非常简单的概念,但我不确定如何实现我的预期结果。我想要的是,以“@”符号开头的单词输出时加<span>
包围它们。
假设以下是整个字符串:
Mark希望新应用程序在周五发布,但有些资产需要精炼才能符合主题@design_team。
我如何捕捉......
@design_team
...子字符串,请记住,子字符串中不应考虑下划线以外的字符,以帮助保留格式。
如果可以使用PHP,请告诉我,如果可以,请告诉我们。
答案 0 :(得分:8)
使用preg_replace
:
$string = preg_replace('/@\w+/', '<span>$0</span>', $string);
\w
匹配单词字符(字母,数字,下划线),+
使其匹配一系列字符。在替换字符串$0
中获取匹配的子字符串。
答案 1 :(得分:1)
$str = "Mark wants the new app to be released on Friday, but some assets need refining so that they fit the theme @design_team.";
preg_match('/\@[a-zA-Z_]+/', $str, $matches);
print_r($matches);
输出
Array
(
[0] => @design_team
)
答案 2 :(得分:1)
您可以使用正则表达式来实现此目的。这是一个例子:
$string = 'Hello @php and @regex!';
$matches = [];
preg_match_all('/@(\w+)/', $string, $matches);
var_dump($matches);
输出:
array(2) {
[0] =>
array(2) {
[0] =>
string(4) "@php"
[1] =>
string(6) "@regex"
}
[1] =>
array(2) {
[0] =>
string(3) "php"
[1] =>
string(5) "regex"
}
}
进一步阅读:preg_match_all。
答案 3 :(得分:1)
如果每个字符串有多个@words ,我认为使用正则表达式会更容易:
$string = '@Mark wants the new app to be released @Friday, but it needs some @refining';
$didMatch = preg_match_all('/(@[^\W]+)/', $string, $matches);
if($didMatch) {
echo "There were " . count($matches[0]) . " matches: <br />";
print_r($matches[0]);
} else {
echo "No @words in string!\n";
}