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 26-05-2010, 18:24
Buddy
 Registrierter Benutzer
Links : Onlinestatus : Buddy ist offline
Registriert seit: Feb 2002
Beiträge: 16
Buddy ist zur Zeit noch ein unbeschriebenes Blatt
Buddy eine Nachricht über ICQ schicken
Standard Problem mit Regex Ausdruck

Hallo zusammen,

habe (wie so oft) mal wieder ein Problem mit einem Regulären Ausdruck.

Ich habe einen Text in dem folgendes rausgefiltert werden muss:

PHP-Code:
XYZ... {{BeginnExportPublicSection}}XYZ..Alle Zeichenerlaut{{EndExportPublicSection}} ...XYZ 
Ich dachte es geht mit dieser Regex, nur leider wird hier nichts entfernt.

PHP-Code:
$suchstring='/\{\{BeginnExportPublicSection\}\}(.*)\{\{EndExportPublicSection\}\}/';
$resultpreg_replace($suchstring,'',$result); 
stell mich wohl etwas dumm an

Geändert von Buddy (26-05-2010 um 19:52 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 26-05-2010, 18:30
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Buddy Beitrag anzeigen
stell mich wohl etwas dumm an
Ja, absolut.

Und zwar insb. damit, dass deine Problembeschreibung im wesentlichen nur „funzt nich“ lautet; und das sogar der Tatsache zum Trotz, dass das gezeigte Suchmuster per preg_match auf den gezeigten Text angewandt "XYZ..Alle Zeichenerlaut" als Treffer liefert.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #3 (permalink)  
Alt 26-05-2010, 20:08
Buddy
 Registrierter Benutzer
Links : Onlinestatus : Buddy ist offline
Registriert seit: Feb 2002
Beiträge: 16
Buddy ist zur Zeit noch ein unbeschriebenes Blatt
Buddy eine Nachricht über ICQ schicken
Standard

Ok, bin dem Probelm näher gekommen, und zwar sind im originalstring zeilenumbrüche enthalten(waren bei dem bsp. string nicht drin, deswegen der match bei dir).

hier originalauszug aus dem zu durchsuchenden string:

PHP-Code:
...<p>{{BeginnExportPublicSection}}  
Ich soll öffentlich sein.
{{
EndExportPublicSection}}
</
p>... 
können unendlich viele zeilenumbrüche sein, nur wie bringe ich das meinen regex bei?
Mit Zitat antworten
  #4 (permalink)  
Alt 26-05-2010, 20:10
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

RTFM: PHP: Full stop - Manual
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #5 (permalink)  
Alt 26-05-2010, 20:29
Buddy
 Registrierter Benutzer
Links : Onlinestatus : Buddy ist offline
Registriert seit: Feb 2002
Beiträge: 16
Buddy ist zur Zeit noch ein unbeschriebenes Blatt
Buddy eine Nachricht über ICQ schicken
Standard

"rtfm" wenn ich schon sowas less, bekomm ich schon wieder ein deutliches zeichen, das manche leute einfach nichts in nem forum antworten sollten..
ein einfaches "hey häng och ein '/s' an, das matched dir auch die zeilenumbrüche" hätte es schon getan. wenn man ein problem hat und in einem forum fragt deutet das doch meist darauf hin, das man es selber nicht hinbekommt, und wahrscheinlcih shcon am kotzen ist. da wäre doch eine einfache antwort nicht zuviel.. vorallem wenn man sie weiß.. trotzdem danke..
Mit Zitat antworten
  #6 (permalink)  
Alt 26-05-2010, 20:35
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Hallo,

mit „.*?“ statt „.*“ matcht es nicht gierig. Ansonsten würde es bei mehreren Vorkommen zuviel entfernen.

Gruß,

Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #7 (permalink)  
Alt 26-05-2010, 20:38
Buddy
 Registrierter Benutzer
Links : Onlinestatus : Buddy ist offline
Registriert seit: Feb 2002
Beiträge: 16
Buddy ist zur Zeit noch ein unbeschriebenes Blatt
Buddy eine Nachricht über ICQ schicken
Standard

Zitat:
Zitat von AmicaNoctis Beitrag anzeigen
Hallo,

mit „.*?“ statt „.*“ matcht es nicht gierig. Ansonsten würde es bei mehreren Vorkommen zuviel entfernen.

Gruß,

Amica
super, danke!
Mit Zitat antworten
  #8 (permalink)  
Alt 30-05-2010, 15:00
tr-oo-per
 Registrierter Benutzer
Links : Onlinestatus : tr-oo-per ist offline
Registriert seit: May 2010
Ort: at work
Beiträge: 32
tr-oo-per befindet sich auf einem aufstrebenden Ast
Standard

Code:
$pattern = "/\{.*\{.*BeginnExportPublicSection.*\}.*\}(.*)\{.*\{.*EndExportPublicSection.*\}.*\}/i";
sollte das gewünschte leisten.

Falls nicht, versuch mal "BeginnExportPublicSection" in "BeginExportPublicSection" umzuwandeln (ein 'n' streichen). Klingt arg nach Denglisch.
Mit Zitat antworten
  #9 (permalink)  
Alt 30-05-2010, 16:02
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von tr-oo-per Beitrag anzeigen
[COLOR=#000000][COLOR=#cc0000][COLOR=Black]
Code:
$pattern = "/\{.*\{.*BeginnExportPublicSection.*\}.*\}(.*)\{.*\{.*EndExportPublicSection.*\}.*\}/i";
sollte das gewünschte leisten.
Nein, das leistet etwas ganz anderes, falls es überhaupt etwas sinnvolles leistet.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #10 (permalink)  
Alt 30-05-2010, 16:15
tr-oo-per
 Registrierter Benutzer
Links : Onlinestatus : tr-oo-per ist offline
Registriert seit: May 2010
Ort: at work
Beiträge: 32
tr-oo-per befindet sich auf einem aufstrebenden Ast
Standard

@AmicaNoctis: etwas ganz anderes? erklär mal bitte oder biete eine Lösung an ... ich mach Deine Beiträge ja auch nicht grundlos madig!

Man könnte die von mir eingefügten '.*' durch '[\s\t\n\r]*' ersetzen, um ausschließlich Leerzeichen, Tabs oder Linebreaks neben den geschweiften Klammern zuzulassen (das Problem waren ja Zeilenumbrüche, die durch den regulären Ausdruck nicht abgedeckt waren, aber dennoch im Quelltext vorkamen).

Geändert von tr-oo-per (30-05-2010 um 16:33 Uhr)
Mit Zitat antworten
  #11 (permalink)  
Alt 30-05-2010, 16:50
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von tr-oo-per Beitrag anzeigen
erklär mal bitte oder biete eine Lösung an
Hatte ich schon, jedenfalls war der Fragesteller damit zufrieden. Aber meinetwegen nochmal:

PHP-Code:
'/\\{\\{BeginnExportPublicSection\\}\\}(.*?)\\{\\{EndExportPublicSection\\}\\}/s' 
Dein Vorschlag dagegen war halt einfach falsch, auch wenn ich dir Recht gebe, dass ich das hätte freundlicher ausdrücken können – nichts für ungut.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #12 (permalink)  
Alt 30-05-2010, 17:02
tr-oo-per
 Registrierter Benutzer
Links : Onlinestatus : tr-oo-per ist offline
Registriert seit: May 2010
Ort: at work
Beiträge: 32
tr-oo-per befindet sich auf einem aufstrebenden Ast
Standard

Mmh, okay.

Ich verstehe nur nicht, weshalb Du '\' escape'st ('\\'). Mit nur einem '\' würdest Du ja gerade die geschweiften Klammern escapen, oder?
D.h. nach meiner Auffassung ...
'/\\{/' liefert alle Stellen an denen '\{' steht, wohingegen
'/\{/' alle Stellen liefert an denen '{' steht.

Gruß,
tr-oo-per
Mit Zitat antworten
  #13 (permalink)  
Alt 30-05-2010, 17:16
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von tr-oo-per Beitrag anzeigen
Ich verstehe nur nicht, weshalb Du '\' escape'st ('\\'). Mit nur einem '\' würdest Du ja gerade die geschweiften Klammern escapen, oder?
Der Regex muss einen Backslash vor { haben, um deren Sonderbedeutung aufzuheben, in einem Nowdoc-String schreibe ich daher

Code:
$pattern = <<<'EOT'
<\{>
EOT;
In einem SQ/DQ-String dagegen hat auch der Backslash eine Sonderbedeutung, die durch Dopplung aufgehoben wird. PHP macht zwar netterweise auch aus "\{" ein \{, aber wenn man sich dessen nicht bewusst ist, wird man gerade als Anfänger Probleme damit haben, einen \ selbst per Regex zu matchen.

"<\\\\>" wird zum Ausdruck <\\> und der matcht ein einzelnes \. Damit das niemand vergisst, verwende ich gerade hier im Forum korrektes Escaping auch in Situationen, in denen es PHP nicht unbedingt notwendig macht.


Zitat:
Zitat von tr-oo-per Beitrag anzeigen
'/\\{/' liefert alle Stellen an denen '\{' steht
Genau das stimmt nämlich nicht.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!

Geändert von AmicaNoctis (30-05-2010 um 17:18 Uhr)
Mit Zitat antworten
  #14 (permalink)  
Alt 30-05-2010, 17:22
tr-oo-per
 Registrierter Benutzer
Links : Onlinestatus : tr-oo-per ist offline
Registriert seit: May 2010
Ort: at work
Beiträge: 32
tr-oo-per befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von AmicaNoctis Beitrag anzeigen
In einem SQ/DQ-String dagegen hat auch der Backslash eine Sonderbedeutung, die durch Dopplung aufgehoben wird. PHP macht zwar netterweise auch aus "\{" ein \{, aber wenn man sich dessen nicht bewusst ist, wird man gerade als Anfänger Probleme damit haben, einen \ selbst per Regex zu matchen.
Verstehe. Dann macht das natürlich Sinn. PHP hat mir da bisher in ähnlichen Fällen netterweise keinen Strich durch die Rechnung gemacht, aber ich werd in Zukunft daran denken, falls es doch mal Probleme gibt.
Mit Zitat antworten
Antwort

Lesezeichen


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

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
regex ausdruck svr PHP Developer Forum 9 31-03-2010 14:05
Regex (Ausdruck kürzer schreiben) Sandmann1 PHP Developer Forum 5 07-12-2007 11:49
Frage zu regex-Ausdruck strauberry PHP Developer Forum 2 07-11-2006 21:46
Frage zu regex-Ausdruck strauberry PHP Developer Forum 6 09-03-2006 23:42
[REGEX] gültige Uhrzeit mit Ausdruck pürfen Patrick_PQ PHP Developer Forum 5 12-02-2004 07:55

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

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

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

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