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

$1これは、preg_replace または preg_replace_callback の置換パターン内でのみ定義される参照を変数として使用できないため、機能しません。$link = "$1";参照$1が定義されていない場合に addMinus を呼び出すと、貧弱な関数はこのリテラル文字列でスペースを見つけようとします。"$1"

問題を解決する方法は、置換前に関数を使用できる preg_replace_callback を使用することです。公式ドキュメントを参照してください: http://php.net/manual/en/function.preg-replace-callback.php

于 2013-08-10T17:17:29.787 に答える
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

正規表現の問題かもしれませんが、最初に実際に置き換えたいもののパターンを知る必要があります。

いずれにせよ、現在、正規表現が発生する前に$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 に答える