php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 15-09-2005, 17:03
daniel987
 Junior Member
Links : Onlinestatus : daniel987 ist offline
Registriert seit: May 2004
Beiträge: 139
daniel987 ist zur Zeit noch ein unbeschriebenes Blatt
daniel987 eine Nachricht über ICQ schicken
Standard [REGEX] Regex mit 2 Variablen - Parser wird gierig

Ich möchte folgendes ersetzten (außenrum steht natürlich noch anderer Text):

{$var|modifier}

Allerdings bekomme ich das pattern dafür einfach nicht hin. Mein bisheriger Versuch ist:

PHP-Code:
#{\$(.+?)\|(.+?)}#Uis 
Allerdings wird dann der Parser immer "gierig" und nimmt einen viel zu großen Text zum erstzen.
Mit Zitat antworten
  #2 (permalink)  
Alt 15-09-2005, 18:56
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard Re: [REGEX] Regex mit 2 Variablen - Parser wird gierig

#{\$(.+)\|(.+)}#Uis
Mit Zitat antworten
  #3 (permalink)  
Alt 15-09-2005, 21:06
daniel987
 Junior Member
Links : Onlinestatus : daniel987 ist offline
Registriert seit: May 2004
Beiträge: 139
daniel987 ist zur Zeit noch ein unbeschriebenes Blatt
daniel987 eine Nachricht über ICQ schicken
Standard

Danke für deine antwort, funktioniert so aber leider immer noch nicht der Parser weitet die Klammer weiterhein bis aufs maximum aus.
Mit Zitat antworten
  #4 (permalink)  
Alt 16-09-2005, 00:20
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von daniel987
Danke für deine antwort, funktioniert so aber leider immer noch nicht der Parser weitet die Klammer weiterhein bis aufs maximum aus.

Ich finde er funktioniert Oo
http://pcre.nophia.de/evaluate/65a25...dex.php#output
Mit Zitat antworten
  #5 (permalink)  
Alt 16-09-2005, 07:45
daniel987
 Junior Member
Links : Onlinestatus : daniel987 ist offline
Registriert seit: May 2004
Beiträge: 139
daniel987 ist zur Zeit noch ein unbeschriebenes Blatt
daniel987 eine Nachricht über ICQ schicken
Standard

Naja der Ausdruck scheint aber nicht immer zu funktionieren, ich füge mal ein Stück von meinem Originalcode ein dann siehst du was ich meine.

http://pcre.nophia.de/evaluate/5be18...dex.php#output
Mit Zitat antworten
  #6 (permalink)  
Alt 16-09-2005, 09:55
TobiaZ
  Moderator
Links : Onlinestatus : TobiaZ ist offline
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.421
Blog-Einträge: 1
TobiaZ befindet sich auf einem aufstrebenden Ast
Standard

Dir ist doch eigentlich klar, wo das Problem liegt, oder?

Der Parser sucht sich die erste klammer und schnappt sich alles bis zur ersten schließenden klammer, die nach einer Pipe kommt. Das hat mit gierig nichts zu tun.

Wenn der erste "Parameter" in deinem Platzhalter keine Leerzeichen enthalten kann/darf, was ich denke, dann reicht es, wenn du im Pattern an der entsprechenden Stelle die Leerzeichen ausschließt.

Noch besser ist natürlich, wenn du den ersten parameter ausschlißlich auf Variablen abstimmst. Vorrausgesetzt das lässt sich mit deinem Vorhaben vereinbaren.
__________________
ERST LESEN: Unsere Regeln. | Ich hab schon Pferde kotzen sehn!

READ THIS: Strings richtig trennen/verbinden | JOINs, das leidige Thema | Wegwerf E-Mail Adressen

Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.

Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!

Geändert von TobiaZ (16-09-2005 um 09:59 Uhr)
Mit Zitat antworten
  #7 (permalink)  
Alt 16-09-2005, 10:15
Titus
 PHP Master
Links : Onlinestatus : Titus ist offline
Registriert seit: Jan 2001
Ort: im Rodgau
Beiträge: 4.292
Titus ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
PCRE regex syntax
...
If the PCRE_UNGREEDY option is set (an option which is not available in Perl) then the quantifiers are not greedy by default, but individual ones can be made greedy by following them with a question mark. In other words, it inverts the default behaviour.
...
Ergo: Nimm das U weg und beide Teilausdrücke werden ungierig.

Alternativ: Ersetze ".+?" durch ".*"
Noch alternativer: #\{\$?(.*)\}#Uis
__________________
mein Sport: mein Frühstück: meine Arbeit:

Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.
Mit Zitat antworten
  #8 (permalink)  
Alt 16-09-2005, 21:45
daniel987
 Junior Member
Links : Onlinestatus : daniel987 ist offline
Registriert seit: May 2004
Beiträge: 139
daniel987 ist zur Zeit noch ein unbeschriebenes Blatt
daniel987 eine Nachricht über ICQ schicken
Standard

Hm also ich hab jetzt mal beide Beispiele ausprobiert, allerdings klappt es damit immer noch nicht, das erst Liefert genau dasselbe Ergebniss wie bisher und das zweite Liefert nur die { } ohne | in der Mitte.

@TobiaZ ja mir war schon klar wo das Problem liegt allerdings hab ich nirgends was dazu gefunden wie man Leerzeichen verbieten kann, ich hab jetzt auch mal den s Modifier entfernt somite beschränkt sich der gefunden Berreich nur noch auf die erste Zeile.
Mit Zitat antworten
  #9 (permalink)  
Alt 17-09-2005, 11:57
Titus
 PHP Master
Links : Onlinestatus : Titus ist offline
Registriert seit: Jan 2001
Ort: im Rodgau
Beiträge: 4.292
Titus ist zur Zeit noch ein unbeschriebenes Blatt
Standard

ah oh ... fehlgelesen ... die Pipe-Symbol (Sonderzeichen!!!) muss escaped werden.

also "noch alternativer" streichen!

Nebenbei: Die Modifier i und s kannst du dir schenken:
- i weil "\w" bzw. "." sowieso schon case-insensitiv sind.
- s weil der gesuchte Text wohl kaum einen Zeilenumbruch beinhaltet.


"$var" ist wohl immer da
nur: ist "|modifier" auch immer vorhanden?

wenn ja: #\{\$(\w+)\|(\w+)\}#U => $1='var', $2='modifier'
wenn nicht: #\{\$(\w+)\(|(\w+))?\}#U => $1='var', $3='modifier' (oder nicht vorhanden)


Wichtig: Das Fragezeichen wenn überhaupt dann _hinter_ die Klammern und nicht ans Ende dazwischen! (sonst passiert --> siehe quote oben)
__________________
mein Sport: mein Frühstück: meine Arbeit:

Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.
Mit Zitat antworten
  #10 (permalink)  
Alt 17-09-2005, 15:17
daniel987
 Junior Member
Links : Onlinestatus : daniel987 ist offline
Registriert seit: May 2004
Beiträge: 139
daniel987 ist zur Zeit noch ein unbeschriebenes Blatt
daniel987 eine Nachricht über ICQ schicken
Standard

Danke der erste funktioniert, zwar ist der 2 Parameter nicht immer vorhanden, aber dann soll auch gar nichts gefunden werden. Somit ist die erste Lösung perfekt.
Mit Zitat antworten
Antwort

Lesezeichen


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

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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


PHP News

Die RIGID-FLEX-Technologie
Die RIGID-FLEX-TechnologieDie sogenannte "Flexible Elektronik" , oftmals auch als "Flexible Schaltungen" bezeichnet, ist eine zeitgemäße Technologie zum Montieren von elektronischen Schaltungen.

06.12.2018 | Berni

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni


 

Aktuelle PHP Scripte

Newsmanager

Der Newsmanager ist ein Newssystem und Newsletter in einem. Mit WYSIWYG Editor und E-Mail import aus einer bestehenden MySql Datenbank sowie dynamische Kategorien / Themen Filter.

11.09.2019 Stephan_1972 | Kategorie: PHP/ News
Modelmanager

Der Modelmanager ist ein Webtool für Fotografen, kann als komplette Homepage oder als Webtool installiert werden.

11.09.2019 Stephan_1972 | Kategorie: PHP/ Webservice
ContentLion - Open Source CMS ansehen ContentLion - Open Source CMS

ContentLion ist ein in PHP geschriebenes CMS, bei dem man Seiten, Einstellungen usw. in Ordnern lagern kann

22.08.2019 stevieswebsite2 | Kategorie: PHP/ CMS
 Alle PHP Scripte anzeigen

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