Volker: Funktion in einem regulären Ausdruck

Hallo zusammen,

ich möchte per PHP in einem Text $text alle E-Mails suchen und als HTML-Code linken, so weit:
$text = preg_replace ("!([_a-zäöüéèàA-ZÄÖÜÉÈÀ0-9-]+(.[_a-zäöüéèàA-ZÄÖÜÉÈÀ0-9-]+)*@([a-zäöüéèàA-ZÄÖÜÉÈÀ0-9-]+.)+([a-zA-Z]{2,3}))!", "<a href="mailto:\1">\1</a>", $text);

Jetzt möchte ich zusätzlich die gefundene E-Mail einer Funktion convertEmail($email) übergeben, die alle @ und . in der E-Mail in [at] und [dot] verwandelt. Die Funktion als solche habe ich, aber wie rufe ich sie innerhalb des regulären Ausdrucks auf?

(Falsche) Verdeutlichung:
$text = preg_replace ("!([_a-zäöüéèàA-ZÄÖÜÉÈÀ0-9-]+(.[_a-zäöüéèàA-ZÄÖÜÉÈÀ0-9-]+)*@([a-zäöüéèàA-ZÄÖÜÉÈÀ0-9-]+.)+([a-zA-Z]{2,3}))!", "<a href="mailto:***convertEmail(??)***">***convertEmail(??)***</a>", $text);

Die regulären Ausrücke verwirren mich zugegeben etwas; wie formuliere ich den Funktionsaufruf richtig?
Danke für Hilfe.

Gruß, Volker

  1. gudn tach!

    ich möchte per PHP in einem Text $text alle E-Mails suchen und als HTML-Code linken, so weit:
    $text = preg_replace ("!([_a-zäöüéèàA-ZÄÖÜÉÈÀ0-9-]+(.[_a-zäöüéèàA-ZÄÖÜÉÈÀ0-9-]+)*@([a-zäöüéèàA-ZÄÖÜÉÈÀ0-9-]+.)+([a-zA-Z]{2,3}))!", "<a href="mailto:\1">\1</a>", $text);

    u.a. die domains .info und .museum bleiben unberuecksichtigt. und punkte koennen auch mehrere hintereinander auftreten. ach ja, das sz wird ebenfalls nicht gematcht.

    kurz: perfekt laesst sich diese aufgabe kaum loesen.

    Jetzt möchte ich zusätzlich die gefundene E-Mail einer Funktion convertEmail($email) übergeben, die alle @ und . in der E-Mail in [at] und [dot] verwandelt. Die Funktion als solche habe ich, aber wie rufe ich sie innerhalb des regulären Ausdrucks auf?

    preg_replace_callback.

    prost
    seth

    1. u.a. die domains .info und .museum bleiben unberuecksichtigt. und punkte koennen auch mehrere hintereinander auftreten. ach ja, das sz wird ebenfalls nicht gematcht.

      Ooops, das stimmt. Danke für den Hinweis.

      kurz: perfekt laesst sich diese aufgabe kaum loesen.

      "Sogar das Vortrefflichste hängt von Umständen ab und hat nicht immer seinen Tag."

      • Baltasar Gracián y Morales

      preg_replace_callback.

      Hach, wieder was naheliegendes übersehen. Bedankt.

      Gruß, Volker

      1. Wie gesagt: Warum eine extra Funktion aufrufen??

    2. Warum denn eine Funktion aufrufen?

      $text = preg_replace ('#([a-zäöüéèàßA-ZÄÖÜÉÈÀ0-9-_.]+)\@([a-zäöüéèàA-ZÄÖÜÉÈÀ0-9-]+)\.([a-zA-Z]{2,5})#','<a href="mailto:\\1[at]\\2[dot]\\3">\\1[at]\\2[dot]\\3</a>', $text);

      1. $text = preg_replace ('#([a-zäöüéèàßA-ZÄÖÜÉÈÀ0-9-_.]+)\@([a-zäöüéèàA-ZÄÖÜÉÈÀ0-9-]+)\.([a-zA-Z]{2,5})#','<a href="mailto:\\1[at]\\2[dot]\\3">\\1[at]\\2[dot]\\3</a>', $text);

        Aber wäre bei diesem Beispiel nicht das "Problem" / der Effekt, dass Punkte vor dem @ nicht durch [dot] ersetzt werden?

        Gruß, Volker