In PHP ist preg_replace_callback eine sehr praktische regelmäßige Ersatzfunktion, mit der Sie Rückruffunktionen verwenden können, um die passenden Ergebnisse basierend auf der regelmäßigen Expressionsübereinstimmung zu verarbeiten. Es wird häufig für komplexe Ersatzanforderungen verwendet, insbesondere wenn der Inhalt des Inhalts dynamische Modifikation erfordert. Das Verständnis der Parameter der Rückruffunktion ist entscheidend für die korrekte Verwendung dieser Funktion. In diesem Artikel wird die Rolle jedes Parameters in der Rückruffunktion preg_replace_callback eins nach dem anderen analysiert.
Mit der Funktion PREG_REPLACE_CALLBACK wird eine Rückruffunktion ausgeführt, um den Teil des regulären Ausdrucks zu ersetzen. Die grundlegende Syntax ist wie folgt:
<span><span><span class="hljs-title function_ invoke__">preg_replace_callback</span></span><span>(</span><span><span class="hljs-variable">$pattern</span></span><span>, </span><span><span class="hljs-variable">$callback</span></span><span>, </span><span><span class="hljs-variable">$subject</span></span><span>);
</span></span>
$ muster : reguläres Ausdrucksmuster.
$ Callback : Eine Rückruffunktion, mit der die passenden Ergebnisse verarbeitet werden.
$ Betreff : Die Zeichenfolge, die übereinstimmt und ersetzt.
Die Rückruffunktion ist der Kern von preg_replace_callback . Wenn der passende Inhalt eine spezielle Verarbeitung benötigt, werden wir in der Regel jede Übereinstimmung über die Rückruffunktion durchführen. Die Definition einer Rückruffunktion kann eine anonyme Funktion oder eine benannte Funktion sein. In jedem Formular akzeptiert die Rückruffunktion eine bestimmte Anzahl von Parametern.
Der erste Parameter der Rückruffunktion ist ein Array, das alle mit dem regulären Ausdruck übereinstimmenden Ergebnisse enthält. Der Inhalt umfasst:
Das erste Element ( $ Matches [0] ) ist die gesamte passende Zeichenfolge.
Die nachfolgenden Elemente ( $ Matches [1] , $ Matches [2] , ...) sind die passenden Ergebnisse jeder Erfassungsgruppe (d. H. Der Teil der Klammern im regulären Ausdruck).
Angenommen, wir haben den folgenden regulären Ausdruck:
<span><span><span class="hljs-variable">$pattern</span></span><span> = </span><span><span class="hljs-string">'/(\d+)\-(\d+)/'</span></span><span>;
</span><span><span class="hljs-variable">$subject</span></span><span> = </span><span><span class="hljs-string">'12-34, 56-78'</span></span><span>;
</span></span>
Verwenden Sie dann preg_replace_callback , um zu handhaben:
<span><span><span class="hljs-title function_ invoke__">preg_replace_callback</span></span><span>(</span><span><span class="hljs-variable">$pattern</span></span><span>, function(</span><span><span class="hljs-variable">$matches</span></span><span>) {
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$matches</span></span><span>);
}, </span><span><span class="hljs-variable">$subject</span></span><span>);
</span></span>
Das Ausführungsergebnis ist:
<span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
[</span><span><span class="hljs-number">0</span></span><span>] => </span><span><span class="hljs-number">12</span></span><span>-</span><span><span class="hljs-number">34</span></span><span>
[</span><span><span class="hljs-number">1</span></span><span>] => </span><span><span class="hljs-number">12</span></span><span>
[</span><span><span class="hljs-number">2</span></span><span>] => </span><span><span class="hljs-number">34</span></span><span>
)
</span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
[</span><span><span class="hljs-number">0</span></span><span>] => </span><span><span class="hljs-number">56</span></span><span>-</span><span><span class="hljs-number">78</span></span><span>
[</span><span><span class="hljs-number">1</span></span><span>] => </span><span><span class="hljs-number">56</span></span><span>
[</span><span><span class="hljs-number">2</span></span><span>] => </span><span><span class="hljs-number">78</span></span><span>
)
</span></span>
$ Matches [0] ist die komplette Zeichenfolge, die übereinstimmt.
$ Matches [1] und $ Matches [2] sind die passenden Subpatter -Teile.
Der Rückgabewert der Rückruffunktion wird als Ergebnis des Ersatzes verwendet. Dies bedeutet, dass die Rückruffunktion nicht nur eine Datenverarbeitungsfunktion ist, der Rückgabewert wirkt sich direkt auf den Inhalt des Ersatzes aus. Wenn die Rückruffunktion eine Zeichenfolge zurückgibt, ersetzt die Zeichenfolge den ursprünglich übereinstimmenden Teil.
Zum Beispiel:
<span><span><span class="hljs-variable">$pattern</span></span><span> = </span><span><span class="hljs-string">'/(\d+)\-(\d+)/'</span></span><span>;
</span><span><span class="hljs-variable">$subject</span></span><span> = </span><span><span class="hljs-string">'12-34, 56-78'</span></span><span>;
</span><span><span class="hljs-variable">$replaced</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_replace_callback</span></span><span>(</span><span><span class="hljs-variable">$pattern</span></span><span>, function(</span><span><span class="hljs-variable">$matches</span></span><span>) {
</span><span><span class="hljs-comment">// Verwenden Sie die Summe von zwei Zahlen als Ersatz</span></span><span>
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$matches</span></span><span>[</span><span><span class="hljs-number">1</span></span><span>] + </span><span><span class="hljs-variable">$matches</span></span><span>[</span><span><span class="hljs-number">2</span></span><span>];
}, </span><span><span class="hljs-variable">$subject</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$replaced</span></span><span>;
</span></span>
Das Ausgangsergebnis ist:
<span><span>46, 134
</span></span>
In diesem Beispiel fügen wir die übereinstimmenden Zahlen hinzu und ersetzen die ursprüngliche Matching -Zeichenfolge durch das Ergebnis.
Die Rückruffunktion selbst kann auch detailliertere Informationen über die Parameter $ offset und $ limit erhalten. Diese Parameter werden normalerweise intern von preg_replace_callback behandelt, aber Sie können diese Parameter über preg_replace_callback_array flexibler steuern. Normalerweise sind im allgemeinen Gebrauch der erste Parameter ( $ Matches ) und der Rückrufwert der Rückruffunktion ausreichend.
Die Funktion preg_replace_callback und seine Rückruffunktion bieten eine große Flexibilität und ermöglichen es Entwicklern, basierend auf dem passenden Inhalt dynamisch zu ersetzen. Der erste Parameter $ übereinstimmt in der Rückruffunktion detaillierte Informationen zur Übereinstimmung, einschließlich der vollständigen Übereinstimmung und der erfassten Gruppeninformationen, während der Rückgabewert der Rückruffunktion den ersetzten Inhalt direkt bestimmt. Nachdem Sie diese grundlegenden Konzepte beherrschen, können Sie preg_replace_callback verwenden, um komplexe reguläre Ersatzvorgänge zu implementieren.