php preg_replace 每次出现不同的字符串
php preg_replace each occurence with different string
假设有一个字符串$comment = "I am tagging @abc and @def here"
.
现在我想用 link 替换每个以 @
开头的单词,其 href 属性和 link 文本是单词中 @
之后的内容。请参阅下面的示例以获得更多说明。
像 @abc
应该替换为 abc
并且 @def
应该替换为 href 属性中的 def
和 link 文本。
结果应该类似于:$comment = "I am tagging <a href='abc'>abc</a> and <a href='def'>def</a> here"
.
我试过了,但我对此一无所知。如果您对问题的理解有任何问题,请发表评论。
提前致谢! :)
我会使用 preg_replace 的回调变体。每次匹配都会调用一次回调。将您实际想要用作关联数组索引的内容作为分组匹配将其作为 $matches 数组中的第二项。
例如:
$res = preg_replace_callback(
"/@([a-z]+)/",
function ( $matches ){
$links = array( 'abc' => 'http://....abc', 'def' => 'http://....def' );
return $links[ $matches[ 1 ] ];
},
"I am tagging @abc and @def here"
);
echo $res;
您使用正则表达式查找所有以单词边界 (\b
) 结尾且以 @
开头的文本。对于其中的每一个,您都在 @
之后提取文本并使用它构建锚标记:
echo preg_replace_callback('/@.+?\b/', function($m) {
$str = substr($m[0], 1);
return sprintf("<a href='%s'>%s</a>", $str, $str);
}, $comment);
您可以使用一次搜索和替换来进行替换:
<?php
$string="I am tagging @abc and @def here";
$search='/\@(\w+)/';
$r='<a href=""></a>';
$s=preg_replace($search, $r, $string);
echo $s.PHP_EOL;
当运行时,它给出:
$ php -f t.php
I am tagging <a href="abc">abc</a> and <a href="def">def</a> here
假设有一个字符串$comment = "I am tagging @abc and @def here"
.
现在我想用 link 替换每个以 @
开头的单词,其 href 属性和 link 文本是单词中 @
之后的内容。请参阅下面的示例以获得更多说明。
像 @abc
应该替换为 abc
并且 @def
应该替换为 href 属性中的 def
和 link 文本。
结果应该类似于:$comment = "I am tagging <a href='abc'>abc</a> and <a href='def'>def</a> here"
.
我试过了,但我对此一无所知。如果您对问题的理解有任何问题,请发表评论。
提前致谢! :)
我会使用 preg_replace 的回调变体。每次匹配都会调用一次回调。将您实际想要用作关联数组索引的内容作为分组匹配将其作为 $matches 数组中的第二项。
例如:
$res = preg_replace_callback(
"/@([a-z]+)/",
function ( $matches ){
$links = array( 'abc' => 'http://....abc', 'def' => 'http://....def' );
return $links[ $matches[ 1 ] ];
},
"I am tagging @abc and @def here"
);
echo $res;
您使用正则表达式查找所有以单词边界 (\b
) 结尾且以 @
开头的文本。对于其中的每一个,您都在 @
之后提取文本并使用它构建锚标记:
echo preg_replace_callback('/@.+?\b/', function($m) {
$str = substr($m[0], 1);
return sprintf("<a href='%s'>%s</a>", $str, $str);
}, $comment);
您可以使用一次搜索和替换来进行替换:
<?php
$string="I am tagging @abc and @def here";
$search='/\@(\w+)/';
$r='<a href=""></a>';
$s=preg_replace($search, $r, $string);
echo $s.PHP_EOL;
当运行时,它给出:
$ php -f t.php
I am tagging <a href="abc">abc</a> and <a href="def">def</a> here