php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 11.03.2011, 11:38  
Benutzer
 
Registriert seit: 28.10.2008
Beiträge: 94
MCee Donald befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] preg_replace() ersetzt nur einen string - nicht alle

Hi ho,

ich hab folgendes Problem und bitte um schnelle Hilfe

Ich baue gerade ein Forum mit eigenem bb-code.
Und zwar ist es u.a. möglich, links einzufügen.
Das wird so realisiert:
PHP-Code:
[link:http://www.beispiel.de]Tolle Seite[/link] 
(Hier wird also "Tolle Seite" mit dem Link "beispiel.de" hinterlegt)

Wenn der Eintrag dann aus der DB geladen wird, wird er folgendermaßen umgewandelt:
PHP-Code:
     $beitrag preg_replace("/\[link:(.*?)\](.*)\[\/link\]/Usi""<a href='$1' target='_blank' rel='nofollow'>$2</a>" $beitrag); 
Das funktioniert soweit auch.
Wenn nun aber ein zweiter (oder noch mehrere) Link vorhanden ist, funktioniert es nicht mehr.
So wie ich das sehe, nimmt er dann den Start-Tag des erstens Link und den End-Tag des letzten Links - und alles was dazwischen ist, ist dann der Link

Das ist natürlich nicht Sinn der Sache...

Ich vermute das liegt am "/Usi" ... Habe mich eigentlich gut über des Regular Expressions informiert - aber komme trotzdem nicht weiter...

Hat jemand eine Idee wie ALLE Links korrekt umgewandelt werden?

Danke schonmal

Gruß
MCee Donald ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 11.03.2011, 12:05  
Erfahrener Benutzer
 
Benutzerbild von mermshaus
 
Registriert seit: 14.06.2009
Beiträge: 1.731
PHP-Kenntnisse:
Fortgeschritten
mermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz sein
Standard

Der U-Modifier macht Quantifier standardmäßig ungreedy und kehrt außerdem die Bedeutung von „?“ hinter einem Quantifier um. „?“ macht einen Quantifier nun greedy. Das ist ein Problem am Anfang deines Patterns.

Wenn du mich fragst: Verzichte generell auf U, der Modifier macht alles nur komplizierter.

Ungetestet:

Code:
/\[link:(.*?)\](.*?)\[\/link\]/si
__________________
Blog | Buch | Kaloa
mermshaus ist offline   Mit Zitat antworten
Alt 11.03.2011, 12:44  
Benutzer
 
Registriert seit: 28.10.2008
Beiträge: 94
MCee Donald befindet sich auf einem aufstrebenden Ast
Standard

ok, ohne den "U"-modifier ist es jetzt, wie du schon sagtest, genau umgekehrt.
Also es ist wieder so, dass der Start-Tag vom ersten und der End-Tag vom letzten Link verwerndet wird. Alles dazwischen wird als Link-Text erkannt und verlinkt auf den ersten angegeben Link.

Also folgender Text:
PHP-Code:
[link:http://www.beispiel.de]Tolle Seite[/link]  anderer Text...blababla... [link:http://www.beispiel2.de]Andere tolle Seite[/link] 
wird wie folgt ausgegeben:

PHP-Code:
der Text "Tolle Seite[/link]  anderer Text...blababla....[link:[url]http://www.beispiel2.de]Andere[/url] tolle Seite" verlinkt auf "http://www.beispiel.de" 
mh... Woran liegt es denn, dass er nicht erkennt, wann der Erste Link endet - und der nächste anfängt?

Gruß
MCee Donald ist offline   Mit Zitat antworten
Alt 11.03.2011, 13:04  
Moderator¹
 
Registriert seit: 28.03.2010
Beiträge: 7.470
PHP-Kenntnisse:
Fortgeschritten
ChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer Anblick
Standard

Zitat:
Zitat von MCee Donald Beitrag anzeigen
Woran liegt es denn, dass er nicht erkennt, wann der Erste Link endet - und der nächste anfängt?
Na eben daran, dass du jetzt greedy suchst ...
__________________
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
ChrisB ist offline   Mit Zitat antworten
Alt 11.03.2011, 13:44  
Benutzer
 
Registriert seit: 28.10.2008
Beiträge: 94
MCee Donald befindet sich auf einem aufstrebenden Ast
Standard

mh... liegt das dann am Fragezeichen? soll ich stattdessen was anderes verwenden? Bin leider noch kein Fachmann und die Manuals klären mich auch nicht zu 100% auf

Gruß
MCee Donald ist offline   Mit Zitat antworten
Alt 11.03.2011, 13:49  
Erfahrener Benutzer
 
Benutzerbild von mermshaus
 
Registriert seit: 14.06.2009
Beiträge: 1.731
PHP-Kenntnisse:
Fortgeschritten
mermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz sein
Standard

Vielleicht mal meinen Ausdruck ansehen?

PHP-Code:
<?php

$input 
= <<<EOT
[link:http://example.org/]Dies ist ein Link[/link].

Dies ist kein Link.

[link:http://example.org/]Dies ist ein Link[/link].
EOT;

echo 
preg_replace('/\[link:(.*?)\](.*?)\[\/link\]/si',
                  
"<a href='$1' target='_blank' rel='nofollow'>$2</a>",
                  
$input);
__________________
Blog | Buch | Kaloa
mermshaus ist offline   Mit Zitat antworten
Alt 11.03.2011, 14:10  
Benutzer
 
Registriert seit: 28.10.2008
Beiträge: 94
MCee Donald befindet sich auf einem aufstrebenden Ast
Standard

Oh hatte den Unterschied zu meinem übersehen

Danke - so funktioniert es jetzt.

Schönes Wochenende
MCee Donald ist offline   Mit Zitat antworten
Alt 11.03.2011, 14:19  
Erfahrener Benutzer
 
Benutzerbild von mermshaus
 
Registriert seit: 14.06.2009
Beiträge: 1.731
PHP-Kenntnisse:
Fortgeschritten
mermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz seinmermshaus kann auf vieles stolz sein
Standard

Greediness/lazyness wird in der Doku hier erklärt, hätte ich eben noch verlinken können.

- http://www.php.net/manual/en/regexp....repetition.php

Ebenfalls ein schönes Wochenende.
__________________
Blog | Buch | Kaloa
mermshaus ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

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 an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Knoten im Kopf, aus mehrdim. Array INSERT .. VALUES (..), (..) machen Chriz PHP Einsteiger 11 21.01.2011 15:55
[Erledigt] ereg - Alternative. Zeichenkette im String suchen und true ausgeben hruendel PHP Einsteiger 6 07.01.2011 23:24
[Erledigt] String von Sonderzeichen und Zahlen befreien pfump PHP Tipps 2010 10 19.11.2010 16:08
Sphider Umlaute und MySQL Fehler xnic Datenbanken 2 03.08.2010 20:10
[Erledigt] Exchange 2007 KalenderItems tarian PHP-Fortgeschrittene 1 26.05.2010 10:23
Scriptangebot Codieren von Texten Ryuuzaki93 Scriptbörse 9 08.02.2010 23:14
[Erledigt] String in Großbuchstaben umwandeln - ohne Funktionen. PalimPalim PHP Tipps 2010 6 04.02.2010 23:26
Records mit PHP ? SimStar001 PHP Tipps 2009 11 08.04.2009 15:14
Persistence Framework #Avedo Software-Design 37 28.03.2009 17:32
string in string suchen,ersetzen,zusammenfügen und update machen litterauspirna PHP Tipps 2009 24 08.01.2009 13:38
PHP5 SOAP - Problem mit Arrays Calexico PHP-Fortgeschrittene 0 11.09.2008 12:06
Event abfangen Ambience JavaScript, Ajax und mehr 4 30.08.2007 14:36
String suchen und tauschen PHP Tipps 2005 13 08.01.2005 22:00

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
preg_replace alternative, php preg replace link, php preg_replace a href ersetzen gross, preg_replace umgekehrt, ersetzt alle wo nicht; preg_replace, preg_replace links ersetzen, preg_replace alle links, php preg_replace alle ersetzen, str_replace ersetzt nur ein zeichen, php preg_replace <a href=\/wiki, preg_replace ersetzt nicht alle, php str_replace ersetzt € nicht, php str_replace nicht alle werden ersetzt, str_replace ersetzt nicht alle, php preg_replace lazy quantifier, preg_replace nur, str_replace ersetzt nicht komplett php, php preg_replace alles bis ersetzen, php preg_replace alle nicht zahlen ersetzen, str_replace aber umgedreht danach

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




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum