-1

これはうまくいくようです:

function findImageTags($string) {       
    $pattern = '/<div(.*?)sourcefile="([^"]+)"(.*?)>(.*?)<\/div>/s';
    return preg_replace($pattern, $this->generateImage("$2"), $string);
}

function generateImage($url){
    return $url;
}

しかし、generateImage 関数で引数を使用して何かを実行しようとすると、引数の値が実際の値ではなく $2 であ​​るため、実行できません。

したがって、これは機能しません:

function generateImage($url){
    $array = explode('.', $url);
    return $array;
}

ちなみに、パターン内の s を e に置き換えることは、推奨されていないと思うので機能しないようです。

では、 generateImage() の引数の値を操作するにはどうすればよいでしょうか?

4

2 に答える 2

1

あなたが望むのはおそらくpreg_replace_callbackではなくpreg_replace. ここでは、置換値を返す関数を使用できます。

于 2013-03-22T10:30:40.947 に答える
0

今のコーディング方法では、$this->generateImage("$2")を呼び出した瞬間にコードが実行されますpreg_replace。コールバックとして渡されるのではなく、最初に実行され、出力がコールバックとして渡されます。

その関数を実行したい場合は、PHP コードを文字列として渡し、e修飾子 ( http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php詳しくはhttp://www.php.net/manual/en/reference.pcre.pattern.modifiers.php )。

return preg_replace($pattern, '$this->generateImage("$2")', $string);

またはpreg_replace_callback()もちろん使用します。

于 2013-03-22T10:30:11.210 に答える