5

str_replace()置換で使用および使用機能は可能ですか?

$value = "gal($data)";

$replace = str_replace($dat, $value, $string);

gal($data)は関数であり、この関数のコードを1つ置き換えて表示する必要がありますが、スクリプトは最後に this のみを提供gal($data)し、関数は何も表示しません

str_replace()コードの置換と関数または同様の方法による置換に使用できますか?

4

1 に答える 1

10

PHP には、preg_replace_callbackこれを行うという関数があります。コールバック関数を渡すと、関数を介して各一致が渡されます。一致した値に基づいて置換するか、無視するかを選択できます。

例として、 などのさまざまな文字列に一致するパターンがあるとし[a-z]+ます。すべてのインスタンスを同じ値に置き換えたくない場合があるため、eat match が見つかったときに関数を呼び出して、どのように応答する必要があるかを判断できます。

function callback ($match) {
    if ($match[0] === "Jonathan")
        return "Superman";
    return $match[0];
}

$subject = "This is about Jonathan.";
$pattern = "/[a-z]+/i";
$results = preg_replace_callback($pattern, "callback", $subject);

// This is about Superman.
echo $results;

コールバック関数で、すべての一致ではなく、特定の一致に対して特別な値を返す方法に注意してください。

略語の拡張

別の例はルックアップです。プログラミング言語の略語を見つけて、それらを完全なタイトルに置き換えたいとします。省略形をキーとし、長い名前を値とする配列がある場合があります。次に、コールバック機能を使用してフルレングスの名前を検索できます。

function lookup ($match) {
    $langs = Array(
        "JS"  => "JavaScript", 
        "CSS" => "Cascading Style Sheets", 
        "JSP" => "Java Server Pages"
    );
    return $langs[$match[0]] ?: $match[0];
}

$subject = "Does anybody know JS? Or CSS maybe? What about PHP?";
$pattern = "/(js|css|jsp)/i";
$results = preg_replace_callback($pattern, "lookup", $subject);

// Does anybody know JavaScript? Or Cascading Style Sheets maybe? What about PHP?
echo $results;

したがって、正規表現が一致を見つけるたびに、一致を に渡し、lookup適切な値または元の値を返すことができます。

于 2012-11-27T22:41:41.130 に答える