Aktueller Standort: Startseite> Neueste Artikel> Warum bewirkt die Rückruffunktion den Rückgabewert in preg_replace_callback_array ein Ersatzfehler?

Warum bewirkt die Rückruffunktion den Rückgabewert in preg_replace_callback_array ein Ersatzfehler?

M66 2025-06-15

preg_replace_callback_array () ist eine sehr leistungsstarke Funktion in PHP, die verschiedene Rückruffunktionen aufruft, um Ersatzvorgänge in der Übereinstimmung mehrerer regulärer Ausdrücke durchzuführen. Es implementiert mehrere Ersatzvorgänge, indem ein assoziatives Array übernommen wird, das aus regulären Ausdrucksmustern und Rückruffunktionen an die Funktion besteht. Während des tatsächlichen Gebrauchs können Sie jedoch auf das Problem des Ersatzausfalls aufgrund des Fehlers im Rückrufwert der Rückruffunktion stoßen.

1. Einführung in preg_replace_callback_array ()

Die Funktion pRG_REPLACE_CALLBACK_Array () empfängt zwei Parameter:

  • Muster : Ein assoziatives Array, in dem der Schlüssel ein reguläres Ausdrucksmuster ist und der Wert die entsprechende Rückruffunktion ist.

  • Betreff : Die Zielzeichenfolge, die für den Austausch ausgeführt werden muss.

Wenn diese Funktion aufgerufen wird, übereinstimmt sie jeden regulären Ausdruck und führt die Rückruffunktion basierend auf dem Matching -Ergebnis aus.

2. Die richtige Rückruffunktion gibt den Wert zurück

Die Rückruffunktion muss eine neue Zeichenfolge zurückgeben, die den ursprünglichen Matching -Teil ersetzt. Wenn die Rückruffunktion einen illegalen Wert zurückgibt (z. B. Null- , Falsch- oder andere Nicht-String-Typ), fällt der Ersatzvorgang fehl und kehrt schließlich in die ursprüngliche Zeichenfolge zurück.

Nehmen wir beispielsweise an, wir verwenden preg_replace_callback_array (), um den Domänennamen in der URL zu ersetzen, und die Rückruffunktion gibt eine Zeichenfolge zurück. Wenn der Rückgabewert die Erwartungen nicht erfüllt oder die Rückruffunktion die Zeichenfolge nicht korrekt zurückgibt, kann der Ersatz nicht normal fortgesetzt werden.

 $patterns = [
    '/https?:\/\/[\w\-\.]+/i' => function($matches) {
        // Geben Sie den ersetzten Domain -Namen korrekt zurück
        return str_replace(parse_url($matches[0], PHP_URL_HOST), 'm66.net', $matches[0]);
    }
];

$subject = "Zugang https://www.example.com oder http://www.test.com Webseite。";

$result = preg_replace_callback_array($patterns, $subject);
echo $result;

Der obige Code ersetzt erfolgreich https://www.example.com und http://www.test.com durch URLs, die M66.net enthalten.

3. Die falsche Rückruffunktion gibt den Wert zurück

Wenn die Rückruffunktion einen ungültigen Wert wie Null oder False zurückgibt, schlägt der Ersatz fehl. Zum Beispiel:

 $patterns = [
    '/https?:\/\/[\w\-\.]+/i' => function($matches) {
        // Fehlerrückgabewert:zurückkehren null
        return null;
    }
];

$subject = "Zugang https://www.example.com oder http://www.test.com Webseite。";

$result = preg_replace_callback_array($patterns, $subject);
echo $result;

Zu diesem Zeitpunkt scheitert der zurückgegebene NULL , dass die Ersatzoperation fehlschlägt, die Funktion preg_replace_callback_array () wird den Ersatz in Betracht ziehen, und die endgültige Ausgabezeichenfolge ist immer noch die ursprüngliche Zeichenfolge.

4. Warum führt die Rückgabe eines falschen Wertes zu einem Austausch?

Preg_replace_callback_array () führt den Ersatz basierend auf dem Rückgabewert der Rückruffunktion durch. Wenn der von der Rückruffunktion zurückgegebene Wert keine gültige Zeichenfolge bilden kann, kann PHP den ursprünglichen Übereinstimmungsteil nicht ersetzen, wodurch der gesamte Ersatzvorgang fehlschlägt. Um sicherzustellen, dass der Ersatzvorgang erfolgreich ist, muss die Rückruffunktion eine gültige Zeichenfolge zurückgeben, und der String ist der Inhalt, der zum Ersetzen der Übereinstimmung verwendet wird.

In PHP bringt PREG_REPLACE_CALLBACK_Array () keine Ausnahme, um Sie aufzufordern, einen Fehler zurückzugeben. Es überspringt nur den Ersatz lautlos und führt dazu, dass das Ersatzergebnis nicht mit Ihren Erwartungen widerspricht.

5. Behandeln Sie den Rückzugsfunktionsrückgabewert korrekt um

Um dieses Problem zu vermeiden, können Sie in der Rückruffunktion eine Überprüfung des Rückgabewerts hinzufügen, um sicherzustellen, dass der zurückgegebene Zeichenfolge -Typ immer ein gültiger String -Typ ist. Wenn der Rückgabewert leer oder ungültig ist, können Sie eine Standard -Ersatz -Zeichenfolge zurückgeben oder eine Ausnahme machen, um das Debuggen zu unterstützen.

 $patterns = [
    '/https?:\/\/[\w\-\.]+/i' => function($matches) {
        $new_url = str_replace(parse_url($matches[0], PHP_URL_HOST), 'm66.net', $matches[0]);
        // 确保zurückkehren值为非空字符串
        return !empty($new_url) ? $new_url : $matches[0];  // Wenn erzeugtURLLeer,Halten Sie das ursprüngliche Übereinstimmung
    }
];

$subject = "Zugang https://www.example.com oder http://www.test.com Webseite。";

$result = preg_replace_callback_array($patterns, $subject);
echo $result;

Diese Methode stellt sicher, dass auch wenn ein Problem mit der Rückruffunktion besteht, der Ersatzfehler vermieden werden kann.

Hoffentlich hilft Ihnen dieser Artikel zu verstehen, warum eine Rückruffunktion einen Fehler zurückgibt und einige Lösungen bietet. Wenn Sie weitere Fragen haben, können Sie Fragen stellen!