Beispiele zu Regulären Ausdrücken

Shopping

Legendäres Mitglied
Ich versuche zur Zeit die Normalisierung zu verstehen, finde jedoch keine geeigneten Quellen. Hat mir vielleicht jemand einen Tipp, wo dies "idotengerecht" anhand von Beispielen erklärt wird.

Zur Verdeutlichung: ich versuche zu verstehen, was genau in folgendem Code steht:
$text = preg_replace('/[^A-Za-z0-9'.$allow.'\s]/e','',$text);

Gruss, Ivo
 
Hallo Ivo,

also entweder liegt es daran das ich wenig geschlafen habe oder dein Beitrag ist einfach "falsch"
biggrin.gif

Normalisierung hat nichts mit Code zu tun, sondern sind Regeln wie man eine Datenbank designen sollte und dabei redundate Daten vermeidet.

Das was du an Code geschrieben hast sind "Reguläre Ausdrücke".
Allerdings bin ich auf dem Gebiet auch kein Experte, aber wenn du mal bei der Suchmaschine deines Vertrauens nach Regulären Ausdrücken suchst findest du schon eine Erläuterung und wirs auch recht schnell und einfach den Code Schnipsel verstehen und übersetzen können!

Schöne Grüße und noch ein schönes Wochenende
 
Ciao Ivo,

Also wenn du Normalisierung meinst, dann musst du hier reinschauen:

IEC / CEI
ISO
ITU / UIT

Dieses sind die 3 offiziellen weltweiten Normen Organisationen.

Wenn du aber deinen Zeichensalat verstehen willst, dann gibt's hier eine gute Seite:

UNIX Reglar Expressions

Und wenn du auf Linux fährst, dann kannst du einfach "man vi" eingeben.

Have a sunny Sunday
René
 
Zuerstmal: Schande ueber mein Haupt. Ich habe da anscheinend wirklich was verwechselt bzw. nicht ganz begriffen und somit erstaunt es auch kaum, dass ich nichts gefunden habe. In die Irre geleitet wurde ich u.a. von diesem Textauszug, der in Selfhtml zu finden ist:

QUOTE Das ganze kann man recht einfach 'normalisieren': $txt = preg_replace('/\015\012|\012|\015/',"\n",$txt);


Euch allen, lieben Dank, ich werde die Links mal studieren und gegebenenfalls nochmals mit ganz konkreten Fragen zurueckkommen.

Gruss, Ivo

 
QUOTE (Ivo Gasser @ So 22.1.2006, 16:00) Zuerstmal: Schande ueber mein Haupt. Ich habe da anscheinend wirklich was verwechselt bzw. nicht ganz begriffen und somit erstaunt es auch kaum, dass ich nichts gefunden habe. In die Irre geleitet wurde ich u.a. von diesem Textauszug, der in Selfhtml zu finden ist:


QUOTE Das ganze kann man recht einfach 'normalisieren': $txt = preg_replace('/\015\012|\012|\015/',"\n",$txt);


Vermutlich meint der Autor bei Selfhtml das entfernen von führenden und anhängenden Leerzeichen und das Entfernen von nicht erlaubten Zeichen.

Also z.B.: " W%ort& " wird "Wort".
 
QUOTE Zur Verdeutlichung: ich versuche zu verstehen, was genau in folgendem Code steht:
$text = preg_replace('/[^A-Za-z0-9'.$allow.'\s]/e','',$text);

Da steht, dass ich den $text nehme und alles '/[^A-Za-z0-9'.$allow.'\s]/e' durch '' (also nichts) ersetzte.
Dabei bedeutet [] dass es um alle (einzelnen) Zeichen geht. ^ steht für die Negation. D.h. [^A-Z] heisst alle nicht-grossBuchstaben. [^A-Za-z0-9] heisst also alle nicht-Buchstaben und nicht-Zahlen. Sei $allow mal ein "-". Dann heisst /[^A-Za-z0-9'.$allow.'\s]/e also: alles was kein Zeichen (a-z gross und klein) und keine Zahl und kein "-", und keine Lehrzeichen (\s) ist, soll durch '' (nichts) ersetzt werden.
Was der modifier /e bedeutet ist mir nicht klar.
 
QUOTE (Alain Aubert @ So 22.1.2006, 16:49) [...] Was der modifier /e bedeutet ist mir nicht klar.

Das steht auch auf der PHP Seite erklärt:


QUOTE e
Wenn dieser Modifikator gesetzt ist, macht preg_replace() in der Ersetzungszeichenkette eine normale Ersetzung von Rückrefenzen, wertet sie als PHP-Code aus und verwendet das Ergebnis um damit die gesuchte Zeichenkette zu ersetzen. Einfache und doppelte Anführungszeichen werden in den ersetzten Rückreferenzen mit einem Backslash maskiert.

Dieser Modifikator wird nur von preg_replace() verwendet; von anderen PCRE-Funktionen wird er ignoriert.


Quelle: http://de.php.net/manual/de/reference.pcre...n.modifiers.php

Also so ähnlich wie in Perl. ;-)



MfG Sascha Ahlers
 
@Alain
Danke, genau das wollte ich wissen. Jetzt habe ich mindestens mal ein klitzekleines Basisverstaendnis auf dem sich hoffentlich aufbauen laesst.

@Sascha
Das klingt ziemlich kompliziert. Da muss ich wohl noch ein wenig hirnen bis ich das wirklich verstanden habe. Dies liesse sich doch bestimmt auch in einfachere Worte packen.

Noch eine kleine Frage an euch Genies
smile.gif
. Hierzu nehme ich nochmals Bezug auf mein Beispiel:
QUOTE $text = preg_replace('/[^A-Za-z0-9'.$allow.'\s]/e','',$text);


Wie muesste dieses Beispiel aussehen, wenn ich mit Alain's Worten: alles was kein Zeichen (a-z gross und klein) und kein Zeichen (ü ä ö gross und klein) und keine Zahl und kein "-", und keine Lehrzeichen (\s) ist, soll durch '' (nichts) ersetzt werden.
 
A Propos, Normalisieren kann man alles, und dein Stichwort sind reguläre ausdrücke, regexp. War recht verwirrend
wink.gif


Manipulier das $allow. Du hast A-Z a-z 0-0 \s und Du willst also noch $allow = "öüäÖÜÄ-" Alternativ ignoriert \i grossKlein.

Bitte aber beachten, dass é und dergleichen nicht als Buchstaben gelten. Also auch durch nichts ersetzt werden.

@Sascha, danke.
 
QUOTE (Ivo Gasser @ So 22.1.2006, 17:29)@Sascha
Das klingt ziemlich kompliziert. Da muss ich wohl noch ein wenig hirnen bis ich das wirklich verstanden habe. Dies liesse sich doch bestimmt auch in einfachere Worte packen.
[...]

Vielleicht hilft dieses Beispiel etwas weiter:


CODE <?php
preg_replace("/(<\/?)(\w+)([^>]*>)/e",
"'\\1'.strtoupper('\\2').'\\3'",
$html_body);
?>


Hierbei wird im Grunde nur die Ersetzung durch den PHP-Parser geschickt, so dass die Funktion strtoupper() benutzt werden kann, was ohne den Modifikator /e nicht möglich wäre. Wichtig hierbei ist darauf zu achten, dass die einzelnen Subpattern im Ersetzungsstring auch escaped werden (statt \1 wird hier \\1).
Dies ist im Grunde eigentlich Sinnlos für Deinen Pattern, da Du ja einfach gar nichts einfügst.
Bei der Variable $allow solltest Du vielleicht den Pattern noch etwas modifizieren, denn wenn in der Variable nicht escape Zeichen stehen, könnte es zu Problemen kommen, bzw. zu unerwünschten Ergebnissen. [1] Ob der Inhalt der Variable escaped werden sollte, hängt ganz davon ab, wie Du diesen Ausdruck verwenden möchtest.



MfG Sascha Ahlers

[1] string preg_quote ( string str [, string delimiter] )
 
Danke, Sascha! Ich weiss, Du meinst es nur gut mit mir, aber Du bist mir im Moment ein paar 100 Schritte voraus. Ich fuehle mich ungefaehr so wie als ich die ersten arabischen Worte gelernt habe. Da kommt wohl noch einiges auf mich zu bis ich die ganzen Details wirklich verstehe...

Ich arbeite mich jetzt mal behutsam in die Materie ein.

Ein Riesendank an Euch alle. Ihr habt mir echt geholfen!

Gruss, Ivo
 
Vielleicht nützt Dir dieses http://www.irene.ch/regulaere_ausdruecke.pdf PDF etwas. Ich habs mal irgendwo im Netz gefunden, als ich mich mit Regexen auseinandersetzen musste. Evtl. passen nicht ganz alle Ausdrücke auf PHP, da es einige verschiedene Regex-"Dialekte" gibt, aber es erklärt zumindest das Wichtigste kurz.

Griessli
Irene
 
Hi Ivo,

weiß nicht genau, ob das oben bei den Links schon irgendwo bei war. Aber ich kann noch den RegEx Coach empfehlen. Damit kann man reguläre Ausdrücke gegen einen Suchstring laufen lassen. Das kann man dabei auch z. B. Schritt für Schritt tun um so genau zu sehen, wann er was macht. Vielleicht hilft das ja auch ein wenig beim 'lernen'.

Grüsse,
Münchow
 
Zurück
Oben