使用 preg_replace_callback 配合正则表达式匹配 url,并将其包裹在 @#@#@#@#@#@#@#@#@#@0 or @#@#@#@#@#@#@#@#@#@1 for more info.
如何处理已存在的链接防止重复转换
当文本中已经包含 @#@#@#@#@#@#@#@#@#@2 保持不变,而新出现的 https://new.com 被转换为可点击链接。这证明了负向断言能有效隔离已处理的区域。
URL中包含特殊字符如问号时的解析行为
在正则表达式 /[^\s]+/ 中,非空白字符类会捕获 URL 末尾可能跟随的标点符号(如句号、逗号)。如果 URL 本身以问号结尾且后面紧跟空格,通常没问题;但如果 URL 嵌入在句子末尾且无空格,可能会多捕获标点。实际测试显示,对于标准 URL 如 http://site.com?a=1,正则能完整捕获参数部分,不会截断。



$text = "Visit https://example.com or http://test.org/page?q=1 for more info.";
$pattern = '/(https?:\/\/[^\s]+)/';
$result = preg_replace_callback(
$pattern,
function($matches) {
return "<a href=".%20%24matches[0]%20.%20"><code>" . $matches[0] . "</code></a>";
},
$text
);
echo $result;
$text = "Check <a href=".%20" https: .>link</a> and new https://new.com.";
$pattern = '/(?)\b(https?:\/\/[^\s]+)/';
$result = preg_replace_callback(
$pattern,
function($matches) {
return "<a href=".%20%24matches[0]%20.%20"><code>" . $matches[0] . "</code></a>";
},
$text
);
echo $result;
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











