Portal > Foren > PHP > PHP-Programmierung > [preg_replace] häää???
Antwort
 
Themen-Optionen
Alt 21.11.2006, 14:16 Nach oben    #1
Oliver O.
 
Benutzerbild von Xean
 
Registriert seit: 17.08.2005
Beiträge: 426
Standard [preg_replace] Wie funktioniert das???

Hi,
ich hab hier diese methode gesehen:
preg_replace
laut php.net ganz praktisch, wenn man weiß wie man sie benutzen kann...
ich weiß es nicht, aber ich würde es gerne verstehen.
wenn ich diese methode in einem quellcode anschaue, dann seh ich da lauter balken, striche, sternchen, aber verstehe nicht, was sie bedeuten.

Hätte jemand die Zeit, all diesen Zeichen mal für mich eine Bedeutung für mich zu geben???
hier ist die methode aus einer funktion, die BBCode umwandelt:

PHP-Code:
$text 
  
preg_replace(
    
"#\[url=(.*?)\](.*?)\[/url\]#si",
    
"<a href=\"\\1\" target=\"_blank\">\\2</a>",
    
$text); 
Ich weiß zwar, dass dies im text einen "BB"-Link zu einem richtigen macht, so viel sehe ich, aber ich wüsste jetzt nicht, wie ich sowas selbst schreiben könnte.

Thx im vorraus

MfG
Xean

Geändert von Xean (21.11.2006 um 14:33 Uhr).
Xean ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.11.2006, 14:23 Nach oben    #2
Christian Mühlroth
 
Benutzerbild von Chr!s
 
Registriert seit: 04.09.2005
Ort: Nürnberg
Beiträge: 561
Standard

Das sind Pattern von regulären Ausdrücken.
Ein schönes Tutorial gibt es z.B. hier: http://www.regenechsen.de/phpwcms/index.php?regex_allg
__________________
http://www.ChrisDiary.De
Chr!s ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.11.2006, 14:24 Nach oben    #3
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.642
Standard

Und ein onlinetest deiner regulären Ausdrücke (auch RegEx genannt) hier: http://regex-tester.de/ der ist von cixx88
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.11.2006, 14:24 Nach oben    #4
Oliver O.
 
Benutzerbild von Xean
 
Registriert seit: 17.08.2005
Beiträge: 426
Standard

hey, danke für die schnelle antwort. werd mir das mal durchlesen, und mich melden, wenn ich was nicht verstehe
Xean ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.11.2006, 14:31 Nach oben    #5
Christian Mühlroth
 
Benutzerbild von Chr!s
 
Registriert seit: 04.09.2005
Ort: Nürnberg
Beiträge: 561
Standard

Der Regex Coach ( http://weitz.de/regex-coach/ ) Ist auch ganz nützlich. Und bitte nimm das nächste Mal einen ausdrucksvolleren Titel (oder editiere deinen, falls du das noch kannst ).
__________________
http://www.ChrisDiary.De
Chr!s ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.11.2006, 19:49 Nach oben    #6
Erfahrener Benutzer
 
Registriert seit: 18.03.2005
Beiträge: 591
Standard

Geht dieser Pattern überhaupt ?
Mich wundert die Angabe von der Backreference.

Backreference = Ist das, was dort als \\1 oder \\2 steht.
Wobei es \1, \2 oder $1 und $2 wäre.

Diese Backreference bezieht sich auf eine Gruppierung ( Suchmuster in runden Klammern).
Die \1 bezieht sich dann also auf das Ergebnis die erste runde Klammer, \2 auf das Ergenis der zweiten runden Klammer usw.
Der Wert, der dort gefunden wird, wird dann bei der dazugehörigen Backreference eingesetzt.

... mal ganz locker Erklärt

EDIT:

Ein Beispiel zum Prinzip:

(a)(b)(c) ... \1 \2 \3

Dann wäre diese:

\1 = a
\2 = b
\3 = c

Geändert von CIX88 (21.11.2006 um 19:52 Uhr).
CIX88 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.11.2006, 21:45 Nach oben    #7
Oliver O.
 
Benutzerbild von Xean
 
Registriert seit: 17.08.2005
Beiträge: 426
Standard

hi, hab versucht, aber geht nicht mehr. sorry, werd nächstes mal daran denken.
aber ich hab jetzt ein problem:

hier ist die fehlerausgabe:
Code:
Warning: preg_replace() [function.preg-replace]: Delimiter must not be alphanumeric or backslash in \bbCode.php on line 7
und so sieht mein code aus:
PHP-Code:
<?
function replaceBBCode($txt){
  $text = preg_replace(
    "\[url=(.*?)\](.*?)\[\/url\]",
    "<a href=\"\1\" target=\"_blank\">\2</a>",
    $txt    
  );                      //<= 7. Zeile!
  return $text;
}
?>
warum kommt diese warnung, und warum geht es nicht?
Xean ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.11.2006, 21:55 Nach oben    #8
Projektleiter
 
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.110
Standard

Code:
"\[url=(.*?)\](.*?)\[\/url\]"
Sollte
Code:
"`\[url=(.*?)\](.*?)\[\/url\]`"
sein. Du brauchst nen "Begrenzer", damit die "Modifier" (z.B. "i" für Case-Insensitive) vom Rest getrennt sind. Wobei du statt "`" auch jedes andere nicht alphanumerische Zeichen (d.h. alles außer Buchstaben und Zahlen) verwenden kannst.
pago ist gerade online  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.11.2006, 22:48 Nach oben    #9
Oliver O.
 
Benutzerbild von Xean
 
Registriert seit: 17.08.2005
Beiträge: 426
Standard

danke, jetzt gehts
Xean ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.11.2006, 00:07 Nach oben    #10
Erfahrener Benutzer
 
Registriert seit: 18.03.2005
Beiträge: 591
Standard

Hmm, ein Hacken hat allerdings das ganze:

[ url = uhu ] hääää [ / url ]
(ohne Leerzeichen)

Das ganze würde hier ansprechen, und daraus ein Link machen.
Eine zusätzliche Prüfung (erstmal Syntax), ob überhaupt eine URL eingetragen würde wäre nicht schlecht.

EDIT:

Oder einfach zusätzlich prüfen, ob hinter url= auch ein Wert kommt.
Bei dem jetzigen Pattern geht dann auch:

[ url = ] hääää [ / url ]
(ohne Leerzeichen)

Geändert von CIX88 (22.11.2006 um 00:10 Uhr).
CIX88 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.11.2006, 06:56 Nach oben    #11
Lutz
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 684
Standard

Zitat:
Zitat von CIX88 Beitrag anzeigen
Geht dieser Pattern überhaupt ?
Mich wundert die Angabe von der Backreference.

Backreference = Ist das, was dort als \\1 oder \\2 steht.
Wobei es \1, \2 oder $1 und $2 wäre.[...]
Ja, der wird funktionieren, ganz einfach weil doppelte Anführungszeichen genutzt wurden muss der Backslash für die Backreference nochmal escaped werden. Ansonsten hast du nat´ürlich recht, würde man einfache Anführungszeichen nehmen, wäre es nur ein Backslash.
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll
MrNiceGuy ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.11.2006, 09:33 Nach oben    #12
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.642
Standard

Nur so als Tipp: es gibt den [noparse] Tag hier.
Aus:
[noparse][url=bla]häää[/url][/noparse]
wird
[url=bla]häää[/url]
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.11.2006, 09:59 Nach oben    #13
Erfahrener Benutzer
 
Registriert seit: 18.03.2005
Beiträge: 591
Standard

Zitat:
Nur so als Tipp
Oh wusste ich nicht, danke !
CIX88 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Alle Zeitangaben in WEZ +2. Es ist jetzt 10:10 Uhr.


Powered by vBulletin® Version 3.7.3 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44