php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2008

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 30.11.2007, 20:19  
Erfahrener Benutzer
 
Registriert seit: 14.10.2007
Beiträge: 306
PHP-Kenntnisse:
Fortgeschritten
Papst befindet sich auf einem aufstrebenden Ast
Standard Gierig/nicht gieriger Regex

Hi,

ich tuh mich gerade ein bisschen schwer bei einer suche bzw einer string-ersetzung via regex.
Zur Erklärung benutze ich hier das Beispiel des BBCode's.
Um z.b. einen [ quote ] Block zu ersetzen benutze ich folgenden Regex:
Code:
#\[quote\](.*)\[/quote\]#Uism
Funktioniert an sich ohne Probleme, mein einziges Problem ist, dass sofern ein 2ter [ quote ] Block innerhalb diesen Quote Blocks existiert, der erste vor seinem eigentlichen Ende beendet wird und der 2. nie anfängt.
Vielleicht steh ich auch nur auf dem Schlauch, habe die Modifikatoren falsch verstanden oder bin schlicht zu blöde dazu Aber irgendwie klappt es nicht so wie ich es gern hätte.
Papst ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 30.11.2007, 20:22  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Du musst bei diesen Tags wohl den Modifier U (ungreedy - nicht gierig) weglassen, schließlich willst du die Gier! An die inneren Tags kommst du dann mit Rekursion/Callbacks.

Original:
[x] a [x] b [/x] c [/x]

RegExp:
"/\[x\](.*)\[\/x\]/":
findet ->
a [x] b [/x] c

Rekursiv RegExp im Ergebnis:
findet ->
b
Zergling-new ist offline  
Alt 30.11.2007, 20:25  
Erfahrener Benutzer
 
Registriert seit: 14.10.2007
Beiträge: 306
PHP-Kenntnisse:
Fortgeschritten
Papst befindet sich auf einem aufstrebenden Ast
Standard

Hmm... eine Möglichkeit ohne nochmaliges Parsen des Strings existiert nicht?
Papst ist offline  
Alt 30.11.2007, 20:26  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Hast du mal preg_match_all() oder preg_replace_callback() versucht? Das nimmt dir ja die Rekursion ab ..
Zergling-new ist offline  
Alt 30.11.2007, 20:31  
CIX88
Gast
 
Beiträge: n/a
Standard

Hmmm, bei solchen Standardsachen wie [ quote ] könnte vielleicht auch einfaches str_replace() reichen, dann erübrigt sich das mit Gier & Co.
 
Alt 30.11.2007, 20:31  
Erfahrener Benutzer
 
Registriert seit: 14.10.2007
Beiträge: 306
PHP-Kenntnisse:
Fortgeschritten
Papst befindet sich auf einem aufstrebenden Ast
Standard

danke, schau ich mir an

Edit: Nach überfliegen der Funktionen muss ich als zu dumm outen
Ich hab bisher den e Modifikator verwendet um die Eingaben einer Funktion zuzuführen, mit preg_replace_callback ist das ganze sehr viel einfacher ^^
Papst ist offline  
Alt 30.11.2007, 21:21  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.989
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Ich glaube Gier ist nicht die Lösung:

Code:
[x]kjfdsh dukhds[x]fkdjg dfsgh[/x]cfd[/x]dflhgd[x]kjfdsh dukhds[/x]
"/\[x\](.*)\[\/x\]/" findet das:
Code:
  kjfdsh dukhds[x]fkdjg dfsgh[/x]cfd[/x]dflhgd[x]kjfdsh dukhds
nicht:
Code:
  kjfdsh dukhds[x]fkdjg dfsgh[/x]cfd
  kjfdsh dukhds"
Schätze, es gibt keine richtige Lösung in einem Ausdruck.
nikosch ist offline  
Alt 30.11.2007, 21:37  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Hm stimmt ich glaub ich hab Käse erzählt. Hm war mir sicher, dass das klappt.

Was genau willst du denn machen?
Zergling-new ist offline  
Alt 30.11.2007, 21:43  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.989
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Sorry, dass ich die Frage blockiere.

Wenn es um eine reine Ersetzung geht ist das unproblematisch. Einfach in einer Schleife von innen nach außen erstzen, bis nix mehr passiert:
PHP-Code:
<?

$test 
'[x]kjfdsh dukhds[x]fkdjg dfsgh[/x]cfd[/x]dflhgd[x]kjfdsh dukhds[/x]';

while (
true)
  {
  
$test1 preg_replace ('#\[x\](.*?)\[/x\]#' '<div>$1</div>' $test);
  if (
$test === $test1) break;
  
$test $test1;
  }

var_dump ($test1);
Code:
<div>kjfdsh dukhds<div>fkdjg dfsgh</div>cfd</div>dflhgd<div>kjfdsh dukhds</div>
nikosch ist offline  
Alt 30.11.2007, 22:08  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

eigentlich langt dann str_replace ..
Zergling-new ist offline  
 


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
Array sortieren mit regex Lupi PHP Tipps 2008 3 21.07.2008 15:17
Regex: Auslesen der Meta-Tags einer Webseite Sucheingrenzung pepe24 PHP Tipps 2008 12 31.05.2008 15:41
2 Regex in PHP kompatible Syntax übersetzen NoiZy PHP-Fortgeschrittene 6 07.04.2008 09:04
Regex Link Problem Broadcast PHP Tipps 2008 2 29.02.2008 16:30
[gelöst :D ] regex tuts nur einmal pro zeile notyyy PHP Tipps 2008 17 24.09.2007 15:40
RegEx für Mail-Adresse (Bitte prüfen!) vollkommenegal PHP Tipps 2006 13 20.11.2006 20:02
Code optmierung durch regex Spyker PHP Tipps 2006 14 23.05.2006 11:12
RegEx kürzen HStev PHP Tipps 2006 5 16.02.2006 15:44
ACCEPT-ENCODING: gzip, regex ermittlung Andreas PHP-Fortgeschrittene 7 04.02.2006 16:52
habe ein paar fragen zu REGEX imported_kremser PHP Tipps 2006 11 31.01.2006 15:30
RegEx findet Stringvorkommen nicht PHP Tipps 2007 6 08.12.2005 21:52
Mit RegEx auslesen - Hilfe beinm RegEx Monty77 PHP-Fortgeschrittene 6 09.06.2005 14:34
Suche ein bestimmtes Regex Chr!s PHP Tipps 2005 5 21.05.2005 12:01
preg_split erzeugt leeren String || regex Schaelle PHP Tipps 2005 2 27.04.2005 18:35
Regex für attribute in quelltexten robo47 PHP Tipps 2005 6 27.01.2005 18:29

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
regex gierig, regex nicht gierig, regexp gierig, regex gier, reg exp gierig, regexp nicht gierig, regular expression gierig, php regex gierig, regex rekursiv, php regex nicht gierig, php gierig, javascript regex gierig, reguläre ausdrücke gierig, gierig regex, gierige regex, regular expression nicht gierig, regex zu gierig, javascript regex gier, php regex gier, reguläre ausdrücke nicht gierig

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:12 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

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.