0

我有如下功能

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);不起作用。空格不替换为“-”。我认为这是因为来自正则表达式的数据。

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

4

3 回答 3

0

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

无论哪种方式,现在都在正则表达式发生之前为其分配了$link一个值。$1告诉我这是否有帮助(如果没有,我们可以从那里弄清楚):

function addgsk($string){
    $regex = '~\(gsk:(.*?)\)~six';
    $link = addMinus($string);
    $output = preg_replace($regex, '<a href="' . $link . '">(gsk:$1)</a>', $string);
    return $output;
}
于 2013-08-10T17:32:23.757 回答
0

不知道你要什么数据

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)
    );

}

尝试两者。

于 2013-08-10T17:36:28.877 回答
0

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

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

于 2013-08-10T17:17:29.787 回答