burghi'sphp-dummies.de
PHP für Einsteiger und Fortgeschrittenere - an laufenden Scripten erklärt
07.09.2010, 01:50 Uhr - Impressum

Tutorials - RegExpressions - Ersetzen - An Funktion senden

Tutorials - RegExpressions
Ersetzen: An Funktion senden
Man muss aber nicht immer direkt ersetzen, mit einem weiteren kleinen Parameter kann man das Gefundene auch an eine PHP-Funktion senden.
Z.B. hier sinnvoll: Umrechnen von DM (hachja... Nostalgie...) in Euro...
Der Parameter hierzu ist einfach ein "e":
<?php
$Text = "Mein Fernseher kostete damals knapp 1200 DM, meine Gitarre knapp 1600DM";

echo preg_replace("'(\d+(,\d+)?)\s*DM'e", "calculate('\\1');", $Text);

function calculate($dm) {
     return round($dm / 1.95583, 2) . " &euro;";
}

?>
Erklärung zum regulären Ausdruck:
-- Mindestens eine Ziffer (0-9):
-- \d+
-- Dann Komma und weitere Ziffern, aber beides muss nicht (muss nicht = "?")
-- \d+(,\d)?
-- Kein oder so viele Sonderzeichen (\s) wie es beliebt:
-- \d+(,\d)?\s*
-- Die Buchstaben DM
-- \d+(,\d)?\s*DM
-- Klammer um den "Zahlausdruck", damit nur dieser an die Funktion gesendet werden kann:
-- (\d+(,\d)?)\s*

Und schon funzt das :)

Der Parameter "e" muss aber auch nicht allein stehen, er kann auch in Verbindung mit "i" dastehen:
<?php
$Text = "Mein Fernseher kostete damals knapp 1200 dm, meine Gitarre knapp 1600DM";

echo preg_replace("'(\d+(,\d+)?)\s*DM'ie", "calculate('\\1');", $Text);

function calculate($dm) {
     return round($dm / 1.95583, 2) . " &euro;";
}

?>
Jetzt nimmt er auch "dm", weil ihm Groß-Klein egal ist.

Was so auch möglich ist, ist das Speichern von gefundenen Worten, um sie später wieder zu verwenden:
<?php
$Text = "Der Maikäfer gehört zu den Blatthornkäfern. Er ist 2-3 cm lang. Er hat 6 Beine, zwei dicke Flügeldecken und zwei dünne Flügel, 2 Augen und 2 Fühler, die vorne wie ein Kamm gefiedert sind. An den Fiedern der Fühler kann man Männchen und Weibchen unterscheiden: Die männlichen Käfer haben 7 lange Fiederchen am Fühler, während die weiblichen nur 6 kleine Fiederblättchen tragen.
Maikäfer sind Pflanzenfresser, die sich hauptsächlich von Blättern der Laubbäume ernähren. Früher traten sie in großen Massen auf und haben ganze Bäume kahlgefressen.
";

$Found = array();     /* Ein Array für die gefundenen Wörter */

echo nl2br(preg_replace("'(\w*)(käfer)(\w*)'ie", "pregHelperFunction('\\0');", $Text));

echo "<br />
<br />
es wurden
" . count($Found) . " Worte gefunden:<br />\n";

foreach($Found as $word) {
     echo "<b>$word</b><br />\n";
}

function pregHelperFunction($found) {
     global $Found;     /* $Found ist nun auch in der Funktion verfügbar */
     $Found[ ] = $found;     /* das gefundene Wort wird dem Array hinzugefügt */
     return $found;     /* $found wird unverändert zurückgegeben */
}

?>
Oder das Durchnummerieren von Suchergebnissen:
<?php
$Text = "Der Maikäfer gehört zu den Blatthornkäfern. Er ist 2-3 cm lang. Er hat 6 Beine, zwei dicke Flügeldecken und zwei dünne Flügel, 2 Augen und 2 Fühler, die vorne wie ein Kamm gefiedert sind. An den Fiedern der Fühler kann man Männchen und Weibchen unterscheiden: Die männlichen Käfer haben 7 lange Fiederchen am Fühler, während die weiblichen nur 6 kleine Fiederblättchen tragen.
Maikäfer sind Pflanzenfresser, die sich hauptsächlich von Blättern der Laubbäume ernähren. Früher traten sie in großen Massen auf und haben ganze Bäume kahlgefressen.
";

$found = 0;

echo nl2br(preg_replace("'(\w*)(käfer)(\w*)'ie", "pregHelperFunction('\\0');", $Text));

function pregHelperFunction($word) {
     global $found;     /* $found ist nun auch in der Funktion verfügbar */
     $found++;          /* $found wird um eins erhöht */
     return "$word <b>( $found )</b>";
}

?>
© 2004-2005 - Impressum