用下划线替换正则表达式匹配中的空格

我希望链接目标在链接地址中的单词之间使用下划线而不是空格。

我的代码如下所示:

preg_replace("/\[\[(.+?)\]\]/", '<a href="/XLab/?document=$1">$1</a>', $document->content)

第一次出现的 $1 应该包含下划线而不是空格。

谢谢你!


芜湖不芜
浏览 51回答 1
1回答

宝慕林4294392

您可以使用preg_replace_callback,因为您可能无法操作字符串替换模式中的反向引用preg_replace:$text = "[[Some text]] and [[one more here]]";echo preg_replace_callback("/\[\[(.+?)]]/", function($m) {&nbsp; &nbsp; &nbsp; &nbsp; return '<a href="/XLab/?document=' . str_replace(' ', '_', $m[1]) . '">' . $m[1] . '</a>';&nbsp; &nbsp; }, $text);请参阅PHP 演示。这里,$m是匹配对象,包含$m[0],整个匹配,以及,和$m[1]之间的内容[[]]str_replace(' ', '_', $m[1])将每个空格替换为_.&nbsp;替换为preg_replace('~\s+~u', '_', $m[1])将任何 1+ 空白块替换为单个_.
打开App,查看更多内容
随时随地看视频慕课网APP