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

Php 用下划线替换正则表达式中的空格匹配,php,regex,Php,Regex,我希望链接目标在链接地址中的单词之间有下划线,而不是空格 我的代码如下所示: preg_replace("/\[\[(.+?)\]\]/", '<a href="/XLab/?document=$1">$1</a>', $document->content) preg\u replace(“/\[\[(.+?)\]\]\]/”,“,$document->content) $1的第一次出现应该有下划线而不是空格 谢谢大家!

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

我的代码如下所示:

preg_replace("/\[\[(.+?)\]\]/", '<a href="/XLab/?document=$1">$1</a>', $document->content)
preg\u replace(“/\[\[(.+?)\]\]\]/”,“,$document->content)
$1的第一次出现应该有下划线而不是空格


谢谢大家!

您可以使用
preg\u replace\u回调
,因为您不能在
preg\u replace
字符串替换模式中操作反向引用:

$text = "[[Some text]] and [[one more here]]";
echo preg_replace_callback("/\[\[(.+?)]]/", function($m) {
        return '<a href="/XLab/?document=' . str_replace(' ', '_', $m[1]) . '">' . $m[1] . '</a>';
    }, $text);
$text=“[[Some text]]和[[one more here]]”;
echo preg\u replace\u回调(“/\[\[(.+?)]]]/”,函数($m){
返回“”;
}美元文本);

这里,

  • $m
    是匹配对象,包含
    $m[0]
    、整个匹配项和
    $m[1]
    、介于
    [[/code>和
    ]]
    之间的内容
  • str_replace('''.'.'.$m[1])
    将每个空格替换为
    .
    。替换为
    preg\u Replace('~\s+~u','''.''.',$m[1])
    以单个
    \u替换任何1+空格块

此代码当前的作用是什么?目前我看不出与下划线有关。也不知道
$document->content
有什么,所以很难测试。很可能
preg\u replace\u回调
可以与
str\u replace('''.'.''.'和$match[1])一起使用