Funktion in regulären Ausdrücken |
hagbard
Posting-Schinder Threadstarter
Beiträge: 532 |
Ich ersetze etwas via preg_replace.
Ein Text wird durch folgendes Ersetzt:
Allerdings will ich, dass beim ersten mal $1 noch durch die Funktion url_ausgabe() läuft. Wie mache ich das?
---
"Wer mit künstlicher Intelligenz arbeitet, muß auch mit natürlicher Dummheit rechnen." (Klaus Kornwachs)
|
 Profil
Editieren
Zitieren
|
einstein
Quasselstrippe
Beiträge: 241 |
1:
2:
3: |
preg_replace("/foo(.+)foo/e", 'yourfunction("\\1")', $str);
|
edit: ohne /e geht natürlich nichts...
Diese Nachricht wurde geändert von: einstein |
 Profil
Editieren
Zitieren
|
hagbard
Posting-Schinder Threadstarter
Beiträge: 532 |
Funktioniert bei mir leider nicht.
---
"Wer mit künstlicher Intelligenz arbeitet, muß auch mit natürlicher Dummheit rechnen." (Klaus Kornwachs)
|
 Profil
Editieren
Zitieren
|
chip
Foren-Team
Beiträge: 419 |
Versuch's mal so:
1: | preg_replace("/foo(.+)foo/e", 'yourfunction("\\1")', $str); |
Wichtig ist der PCRE-Modifier "e" am Ende, denn nur der erlaubt die Weiterverarbeitung in einer Funktion!
---
|
 Profil
Website
Editieren
Zitieren
|
hagbard
Posting-Schinder Threadstarter
Beiträge: 532 |
Ich bekomm es einfach nicht hin.
Mein Code, wie er noch funktionierte
1:
2:
3: |
preg_replace("#([a-z0-9_-][a-z0-9\._-]*@[a-z0-9_-]+(\.[a-z0-9_-]+)+)#is",'$1',$str);
|
Dann wollte ich nix anderes machen als die variable $1 durch die funktion mail_zerlegen() zu jagen.
Ich bekomme es nur leider nicht zum laufen.
---
"Wer mit künstlicher Intelligenz arbeitet, muß auch mit natürlicher Dummheit rechnen." (Klaus Kornwachs)
|
 Profil
Editieren
Zitieren
|
chip
Foren-Team
Beiträge: 419 |
Bei preg_replace werden die gefundenen Unter-Suchmuster aber nicht mit $1, $2, ... angesprochen, sondern mit \\1, \\2, usw.
Und vergiss den PCRE-Modifier nicht. Du hast ja schon i und s verwendet. Jetzt da noch e anhängen und beim "Ersetzen-Muster" die Funktion einsetzen.
---
|
 Profil
Website
Editieren
Zitieren
|
chip
Foren-Team
Beiträge: 419 |
Übrigens muss die Funktion auch noch richtig gestaltet sein (z.B. return-Anweisung nicht vergessen). Poste die Funktion einfach mal
---
|
 Profil
Website
Editieren
Zitieren
|
languitar
Foren-Team
Beiträge: 2795 |
chip schrieb am 29.02.2004 15:22
Bei preg_replace werden die gefundenen Unter-Suchmuster aber nicht mit $1, $2, ... angesprochen, sondern mit \\1, \\2, usw. |
Das ist Käse. $n geht genau so gut und läuft z.B. auch hier im Forum.
Also bisher fehlt bei dir der Modifier e. Folgendes sollte Funktionieren:
1: | preg_replace("#([a-z0-9_-][a-z0-9\._-]*@[a-z0-9_-]+(\.[a-z0-9_-]+)+)#ise", url_ausgabe("$1")."hier der andere mist zum ersetzen $1", $str); |
|
 Profil
Editieren
Zitieren
|
hagbard
Posting-Schinder Threadstarter
Beiträge: 532 |
Jetzt läuft es. Ich habe es einfach nicht hinbekommen, dass vor und nach der Funktion noch Text angezeigt wird.
Danke!
---
"Wer mit künstlicher Intelligenz arbeitet, muß auch mit natürlicher Dummheit rechnen." (Klaus Kornwachs)
|
 Profil
Editieren
Zitieren
|
chip
Foren-Team
Beiträge: 419 |
languitar schrieb am 29.02.2004 16:17
chip schrieb am 29.02.2004 15:22
Bei preg_replace werden die gefundenen Unter-Suchmuster aber nicht mit $1, $2, ... angesprochen, sondern mit \\1, \\2, usw. |
Das ist Käse. $n geht genau so gut und läuft z.B. auch hier im Forum.
Also bisher fehlt bei dir der Modifier e. Folgendes sollte Funktionieren:
1: | preg_replace("#([a-z0-9_-][a-z0-9\._-]*@[a-z0-9_-]+(\.[a-z0-9_-]+)+)#ise", url_ausgabe("$1")."hier der andere mist zum ersetzen $1", $str); |
|
OK, hast ja recht. Ich hab mir das ganze nochmals in der PHP-Manual angeschaut. Ich wusste bloß vorher nicht, dass man die "Backreferences" auch wie Variablen ansprechen kann.
Sorry hagbard, sorry languitar
---
Diese Nachricht wurde geändert von: chip |
 Profil
Website
Editieren
Zitieren
|