如何将正则表达式数据转换为全局字符串php


How to convert a regex data to global string php

我有一个类似的函数

function addMinus($string){
  $output = str_replace("%20", "-", $string);
  $output = str_replace(" ", "-", $output);
  return $output;
}

我需要在下面的函数中使用上面给出的函数

function addgsk($string){
    $regex = '~'(gsk:(.*?)')~six';
    $link = "$1";
    $link = addMinus($link);
    $output = preg_replace($regex, "<a href='$link'>(gsk:$1)</a>", $string);
   return $output;
}

但我的问题是$link = addMinus($link);不起作用。空格不替换为"-"。我认为这是因为regex中的数据。

注意:我没有得到任何错误,但函数(addMinus)不起作用。

正则表达式可能有问题,但我们需要先知道实际要替换的模式。

无论哪种方式,现在$link在regex出现之前已经分配了一个值$1。告诉我这是否有帮助(如果没有,我们可以从中找出答案):

function addgsk($string){
    $regex = '~'(gsk:(.*?)')~six';
    $link = addMinus($string);
    $output = preg_replace($regex, '<a href="' . $link . '">(gsk:$1)</a>', $string);
    return $output;
}

这不起作用,因为不能使用像$1这样的引用作为仅在preg_replace或preg_replace_callback的替换模式中定义的变量。当您编写$link = "$1";时,引用$1没有定义,当您调用addMinus时,较差的函数会尝试在这个文本字符串中查找空格:"$1"

解决问题的一种方法是使用preg_replace_callback,它允许在替换之前使用函数。请参阅官方文件:http://php.net/manual/en/function.preg-replace-callback.php

我不知道你想要什么数据,

function add_minus_gsk($string) {
    return preg_replace_callback(
        '@'(gsk:([^)]++)')@i',
        function ($matches) {
            return sprintf(
                '<a href="%s">(gsk:%s)</a>',
                str_replace(array('%20', ' '), '-', $matches[1]),
                $matches[1]
            );
        },
        $string
    );
}

function add_minus_gsk($string) {
    return preg_replace(
        '@'(gsk:([^)]++)')@i',
        '<a href="$1">(gsk:$1)</a>',
        str_replace(array('%20', ' '), '-', $string)
    );
}

两者都试试。