Spezielle Zeichenkette übersetzen, regular expressions
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anfang
buchstabe
code
einloggen
eintrag
ende
folgende zeile
frage
http
komma
obige zeile
stellen
teil
tester
url
verstehen
vier
voreinstellung
vorkommen
wiederholung
-
Guten Abend,
seit gut einer Stunde suche ich bereits im Web nach einer Listung der regulären Ausdrücke, konnte bisher jedoch nicht so recht fündig werden. Im Speziellen geht es um zwei Zeichenketten, die per PHP-Code ersetzt werden sollen. Weil ich an dem abgetippten Code jedoch alles verstehen möchte, habe ich versucht die Teile eigenständig zu übersetzen, das klappt jedoch nur unzureichend.
Bitte um Hilfe!
Teil 1:
/(\s{4})\s+/
Dass bei {4} eine Wiederholung maximal 4 Mal möglich ist, weiß ich bisher. Jedoch nicht, was genau wiederholt werden soll.
\s bezeichnet ein Leerzeichen
Teil 2
~(.)(){4,}~
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Meistens ist es bei regular expressions immer so das zuerst gesagt wird was gesucht wird und dann wie oft.
-finde den buchstaben B
-aber nur wenn er vier mal hintereinander kommt:
B{4}
-finde den buchstaben B
-aber nur wenn er vier mal hintereinander kommt oder mehr als vier mal
B{4,}
-finde den buchstaben B
-aber nur wenn er einmal oder mehr als einmal vorkommt
B{1,}
wobei es für {1,} eine kurzform gibt (+)
B+
/(\s{4})\s+/
finde leerzeichen (\s) exakt(!) vier mal, gefolgt von leerzeichen (\s) die mindestens einmal und maximal unendlich oft (+) vorkommen
Merke dir nur die vier leerzeichen.
klickmich
~(.)(){4,}~
Ich vermute gemeint ist:
/(.{4,})/
Was heissen würde:
-finde ein beliebiges Zeichen ausser white-space(=leerzeichen/umbruch/tab u.ä. je nach voreinstellungen).
-Dieses beliebige Zeichen muss aber mindestens vier mal vorkommen (beacthe das Komma).
-Merke dir die Treffer (die runden klammern veranlassen das)
klickmich
Zur Übersicht:
http://de.selfhtml.org/javascript/objekte/regexp.htm#dollar_1_9
http://www.sql-und-xml.de/regex/glossar.html
Was Du verstehen solltest:
{n}
Fordert genau n Übereinstimmungen
{n,}
Mindestens n Übereinstimmungen erfüllen
{n,m}
Mindestens n, höchstens m Übereinstimmungen sind erlaubt
+
Eine oder mehr Übereinstimmungen, gleichbedeutend zu {1,}
.
Der Punkt steht für alle Zeichen mit Ausnahme von \n. Ist die Single-Line-Option gewählt, dann ist \n mit eingeschlossen.
Beitrag zuletzt geändert: 15.1.2011 3:52:57 von simuliertes -
$eintrag = preg_replace('/(\s{4})\s+/', '', $eintrag);
Die obige Zeile würde also bedeuten, dass alle Stellen, wo mehr als vier Leerzeichen eingegeben werden, quasi gelöscht werden.
Die Frage, die sich mir jetzt stellt wäre, warum der Autor des Quelltextes dann noch folgende Zeile vorangehen lässt:
$eintrag = trim($eintrag);
Das wäre doppelt gemoppelt, oder nicht? -
createtheweb schrieb:
$eintrag = preg_replace('/(\s{4})\s+/', '', $eintrag);
Die obige Zeile würde also bedeuten, dass alle Stellen, wo mehr als vier Leerzeichen eingegeben werden, quasi gelöscht werden.
richtig.
In diesem zusammenhang ist es eigentlich dasselbe wie:
$eintrag = preg_replace('/\s{5,}/', '', $eintrag);
createtheweb schrieb: .
Die Frage, die sich mir jetzt stellt wäre, warum der Autor des Quelltextes dann noch folgende Zeile vorangehen lässt:
$eintrag = trim($eintrag);
Das wäre doppelt gemoppelt, oder nicht?
Nein, Weil trim alle Leerzeichen am Anfang und Ende des strings enfernt, unabhängig davon wieviele es sind (sozusagen /\s+/).
Üblich ist das zB beim einloggen, weil die Benutzer ja Leerzeichen am Anfang & Ende nicht sehen und sich dann wundern würden warum das einloggen mit ihrem Namen nicht klappt.
Beitrag zuletzt geändert: 16.1.2011 10:36:20 von simuliertes -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage