Home | Registrieren | Einloggen | Suchen | Aktuelles


Forum » PHP & MySQL » Funktion in regulären Ausdrücken Antworten
Funktion in regulären Ausdrücken

hagbard
Posting-Schinder


Beiträge: 539



Ich ersetze etwas via preg_replace.

Ein Text wird durch folgendes Ersetzt:

1:
'<a href="http://$1" target="geo2">$1</a>',


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


Beiträge: 539



Funktioniert bei mir leider nicht.

---
"Wer mit künstlicher Intelligenz arbeitet, muß auch mit natürlicher Dummheit rechnen." (Klaus Kornwachs)

  Profil   Editieren   Zitieren

chip
Quasselstrippe


Beiträge: 391


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


Beiträge: 539


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",'<a href="schreiben.php?mail=$1">$1</a>',$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
Quasselstrippe


Beiträge: 391


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
Quasselstrippe


Beiträge: 391


Ü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);


---
Take a look here!
Lichtblick - Einblick - Ausblick

  Profil   E-Mail   Website   Editieren   Zitieren

hagbard
Posting-Schinder


Beiträge: 539



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
Quasselstrippe


Beiträge: 391


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
 

Antworten
Nach oben