让我们从一个例子开始:
$str = "[[Яша|ya.ru]] qwerty [[Яков|yandex.ru]]";
$str = preg_replace('/\[\[(.*?)\|(.*?)\]\]/','<a href="$2" target="_blank">$1</a>',$str);
echo $str;
我接受来自用户的$str字符串。
基本上,上面的代码有效,但没有进行检查。preg_replace 中
找到的$1和$2在使用前如何受到影响?
也许我错了,有更好的解决方案,我会很高兴听到它。
您可以使用该函数在替换期间处理捕获的值
preg_replace_callback
。当需要在将捕获的子字符串插入修改后的字符串之前对它们执行一些操作时,使用它。根据关联数组替换单词并将域名转换为大写的代码示例:
结果:
请注意
use ($dict, &$res)
:$dict
可用于只读,&$res
- 可用于读取和写入(感谢&
)。我的版本,在@teran 的帮助下: