⊗ppPmRgRCb 260 of 447 menu

Ersetzung mit Callback über reguläre Ausdrücke in PHP

Nehmen wir an, wir haben die folgende Zeichenkette:

<?php $str = '2+3= 3+5= 7+8='; ?>

Nehmen wir an, wir müssen alle Konstrukte der Form Zahl+Zahl= finden und dafür sorgen, dass nach dem Gleichheitszeichen das Ergebnis der Addition erscheint.

Um solche Aufgaben zu lösen, ist es praktisch, die Funktion preg_replace_callback zu verwenden, die ähnlich wie die Funktion preg_replace funktioniert - sie findet und ersetzt mittels regulärem Ausdruck, erlaubt aber zusätzliche Manipulationen mit den gefundenen Teilen.

Der erste Parameter der Funktion ist der reguläre Ausdruck, der zweite - der Ersatz, der dritte - die Zeichenkette, in der die Ersetzung durchgeführt wird.

Dabei sollte im zweiten Parameter eine Callback-Funktion übergeben werden, die für jedes gefundene Vorkommen aufgerufen wird.

Als ersten Parameter des Callbacks muss man die Variable angeben, in die das Gefundene gelangt. Diese Variable wird ein Array der erfassten Gruppen (Capturing Groups) des Gefundenen sein.

Probieren wir es in der Praxis. Schreiben wir Code, der unsere Teilzeichenketten findet und dabei die erste Zahl in der ersten Gruppe und die zweite - in der zweiten Gruppe speichert:

<?php $str = '2+3= 3+5= 7+8='; preg_replace_callback('#(\d+)\+(\d+)=#', function($match) { var_dump($match); }, $str); ?>

Infolgedessen wird unser var_dump drei Mal ausgeführt und nacheinander Folgendes ausgeben:

['2+3=', '2', '3'] ['3+5=', '3', '5'] ['7+8=', '7', '7']

Weiter. Jedes Vorkommen wird ersetzt durch das, was der Callback via return zurückgibt. Ersetzen wir zum Beispiel jede der gesuchten Teilzeichenketten durch das Zeichen '!':

<?php $str = '2+3= 3+5= 7+8='; $res = preg_replace_callback('#(\d+)\+(\d+)=#', function($match) { return '!'; }, $str); echo $res; // gibt '! ! !' aus ?>

Und jetzt ersetzen wir jede Teilzeichenkette durch die Summe der Zahlenpaare darin:

<?php $str = '2+3= 3+5= 7+8='; $res = preg_replace_callback('#(\d+)\+(\d+)=#', function($match) { return $match[1] + $match[2]; }, $str); echo $res; // gibt '5 8 13' aus ?>

Damit ist unsere Aufgabe fast gelöst. Es bleibt nur noch dafür zu sorgen, dass vor der Summe der Zahlen die gesuchte Teilzeichenkette erhalten bleibt. Dazu fügen wir vor der Summe den Inhalt der Gruppe 0 (null) ein:

<?php $str = '2+3= 3+5= 7+8='; $res = preg_replace_callback('#(\d+)\+(\d+)=#', function($match) { return $match[0] . ($match[1] + $match[2]); }, $str); echo $res; // gibt '2+3=5 3+5=8 7+8=13' aus ?>

Gegeben sei die Zeichenkette:

<?php $str = 'The numbers are 3, 7 and 12'; ?>

Ersetzen Sie alle Zahlen in der Zeichenkette durch ihre Quadrate.

Erwartetes Ergebnis:

'The numbers are 9, 49 and 144'

Gegeben sei die Zeichenkette:

<?php $str = '2023-01-15 2022-12-31 2024-05-20'; ?>

Konvertieren Sie alle Daten in das Format Tag.Monat.Jahr.

Gegeben sei die Zeichenkette:

<?php $str = 'Costs: $15, $20, $100'; ?>

Erhöhen Sie alle Preise um 10%.

Deutsch
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wir verwenden Cookies für den Betrieb der Website, Analyse und Personalisierung. Die Datenverarbeitung erfolgt gemäß der Datenschutzerklärung.
alle akzeptieren anpassen ablehnen