我有以下字符串...
Out with the <_link>user://1|Team GB for
<_link>tag://FridayBeers|#FridayBeers
而且我编写了以下正则表达式,以去除标签和字符。
~<(/){0,1}.*?( /){0,1}>|(tag://\w*\||user://[0-9]*\|)~
但是,我现在需要实现的是以下内容
<_link>user://1|Team GB
被转换成<a href="user/1">Team GB</a>
和<_link>tag://FridayBeers|#FridayBeers
以<a href="tags/FridayBeers">#FridayBeers</a>
有人可以发布一个答案来更改我的正则表达式以允许我使用PHP吗?
$post_text = "Out with the <_link>user://1|Team GB for <_link>tag://FridayBeers|#FridayBeers";
$pattern = "~<(/){0,1}.*?( /){0,1}>|(tag://\w*\||user://[0-9]*\|)~"; //"~<(/){0,1}.*?( /){0,1}>|(tag://\w*\||user://[0-9]\|)~";
$replacement = " ";
$regexd = preg_replace($pattern, $replacement, $post_text);
您可以使用preg_replace_callback实现此目的。下面的代码示例只是一个最小的示例(请参见下面的通知)。
<?php
$pattern = "~\<_link\>((?<typeUser>user)\://(?<userId>\d+)\|(?<userName>[a-zA-Z]+)|(?<typeTag>tag)\://(?<tagLink>[a-zA-Z]+)\|#(?<tagTitle>[a-zA-Z]+))~";
$string = "<_link>user://1|Team GB and <_link>tag://FridayBeers|#FridayBeers";
echo preg_replace_callback($pattern, function($match) {
if(!empty($match['typeUser'])) {
return '<a href="user/'.$match['userId'].'">'.$match['userName'].'</a>';
} else {
return '<a href="tags/'.$match['tagLink'].'">'.$match['tagTitle'].'</a>';
}
}, $string);
这段代码不关心转义HTML。另外,该模式只关心名称中没有空格。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句