Portal > Foren > PHP > PHP-Programmierung > Was macht mein regexp?
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 03.11.2006, 22:24 Nach oben    #1
Erfahrener Benutzer
 
Registriert seit: 30.10.2005
Beiträge: 279
Standard Was macht mein regexp?

Nabend miteinander,

Ich erweitere grade PEAR Text_Wiki um ein paar eigene Rules. Da ich von den reg. Ausdrücken fast keine Ahnung habe, hab ich mir mal die regexps der Text_Wiki Klasse angeschaut und mein eigenes gemacht.

So richtig funktionieren tut es aber nicht. So sieht ein Textstring vor dem transform() aus:

Code:
Absatz

[mypage%image%100%left%Bildbeschreibung]

Absatz
oder am String Anfang/Ende:

Code:
[mypage%image%100%left%Bildbeschreibung]

erster Absatz.
Mein Wikicode soll in einer eigenen Zeile stehen, ist dies der Fall wird er ersetzt. Sowas allerdings soll nicht ersetzt werden:

Code:
Absatz [mypage%image%100%left%Bildbeschreibung] Text

nächste Absatz
Ich hab mir mal den Ausdruck für das Parsen von HTML Blöcken in de Text_Wiki Klasse angeschaut, da das HTML Zeug in einer eigenen Zeile stehen muss und ich vielleicht irgendwie ableiten könnte. Hier der Ausdruck für HTML vielleicht hilfts:

PHP-Code:
var $regex '/^\<html\>\n(.+)\n\<\/html\>(\s|$)/Umsi'
Und hier ist nun meiner:

PHP-Code:
var $regex '/^\[mypage%image%(.*?)%(left|right)%(.*?)\]/msi'
Zum einen weiß ich nicht ob mein Ausdruck optimal ist. Beispielsweise soll an der Stelle des ersten (.*?) ausschließlich Zahlen stehen. Derzeit würde er ja alles erlauben. Desweiteren soll neben "left" und "right" auch "center" erlaubt sein wenn ich aber (left|center|right) funktioniert nix mehr. Hinzukommt das ich nicht weiß für was das /^\ oder /msi ist. Vor allem im HTML Pattern das (\s|$)/Umsi ist für mich ein Rätsel.
ex³ ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 04.11.2006, 11:13 Nach oben    #2
Johannes Müller
 
Benutzerbild von $traight-$hoota
 
Registriert seit: 15.09.2005
Ort: Königreich Flieden
Beiträge: 521
Standard

also ^ bedeutet Anfang des Textes bzw. mit dem modificator m einer Zeile.
/msi sind eben solche "Modifikatoren" und bedeuten, dass der regex zeilenweise verwendet wird (m), bei buchstaben nicht nach groß- und kleinschreibung unterschieden wird (i) und der .-operator auch für zeilenumbrüche gilt.
im HTML pattern steht (\s|$) dafür, dass entweder ein whitespace (leerzeichen, tab, zeilenumbruch; \s) oder das zeilen- bzw string-ende folgt ($).
dein regex müsste so lauten:
Code:
/\n\s*\[mypage%image%(\d*)%(left|right|center)%([^\]]*?)\]\s*\n/m
[EDIT]
regex angepasst.
weiteres ausprobieren geht hier ganz einfach *gg*
__________________
Weißt Bescheid - Scheiß wie weit

Geändert von $traight-$hoota (04.11.2006 um 11:19 Uhr). Grund: falscher regex
$traight-$hoota ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 04.11.2006, 14:46 Nach oben    #3
Erfahrener Benutzer
 
Registriert seit: 30.10.2005
Beiträge: 279
Standard

Danke Straight für die Hilfe. Der Regex Tester ist ja garnicht schlecht. Leider hab ich bei meinem Post einen Fehler gemacht und meinen Ergebnis String gepostet, der nach einem erfolgreichen Matching gebaut wird. Jedenfalls hat sich das Problem ein wenig verändert und da hänge ich. Dein Link zum getesteten regex ist schon ähnlich gut, aber das ist möglicherweise ein Problem was im nächsten Schritt vielleicht passieren wird. Egal hier mal etwas:

Code:
[mysite:image:230|left]

Absatz

[mysite:image:260|right]

Das ist ein [mysite:image:20|left] Absatz

Absatz

[mysite:image:290|center]
Angenommen ich habe obige Datei. Wie findet er nun alle Vorkommen meines [mysite...] Strings außer das dritte Vorkommen (das steht in einem Absatz und nicht in einer eigenen Zeile.

Ich habe deinen regex angepasst aber er findet nur die Vorkommen die von zwei Absätzen eingekesselt sind. Die Stücke am Datei Anfang und Ende soll er aber auch finden. Das Stringstück innerhalb eines Absatzes wird ignoriert das stimmt.

Vielleicht kannst du was noch dran machen:
http://www.regex-tester.de/regex_20061104144034.html
ex³ ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 05.11.2006, 11:52 Nach oben    #4
Johannes Müller
 
Benutzerbild von $traight-$hoota
 
Registriert seit: 15.09.2005
Ort: Königreich Flieden
Beiträge: 521
Standard

Code:
(?:\n|^)\s*\[mysite:image:(\d*)\|(left|right|center)\]\s*(?:\n|$)
sollte eigentlich klar sein, für was 1 und $ stehen. ?: bedeutet, dass der inhalt der klammer nicht in das suchergebnis kommt.
__________________
Weißt Bescheid - Scheiß wie weit
$traight-$hoota 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 Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

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

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Regexp umstellen von " auf ' bei preg_match_all dago PHP-Programmierung 8 02.02.2007 21:33
Werte in einen Regexp einsetzen. ex³ PHP-Programmierung 6 02.02.2007 07:27
regexp Datums-Vervollständigung ex³ PHP-Programmierung 10 12.02.2006 16:16
[PHP] Regexp und die Gierigkeit CIX88 Tutorials 0 29.01.2006 13:36
[MySQL] REGEXP Problem Jay Datenbanken 3 27.12.2005 13:52


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