Also ich versuchs mal ... (*Oh Jeh! ...*)
Part 1 ist klar - Variable wird mit Text (HTML) gefüllt (in diesem Beispiel).
Part 2 -
ist eine funktion, die dazu dient nach einem Stringmuster (in den Tuts wird es Pattern genannt) - dass man in den Klammern als ersten Parameter einträgt - zu suchen und dass Vorkommen (Anzahl oder im Falle des Vorkommens den String) zu speichern(über Backreference weiter hinten in den Parameter-Klammern). Also wenn der String "++text++" ist, kann ich preg_match_all so einstellen, dass es bei Angabe des Musters ++ ++ den String "text" z.B. nur einmal speichert, egal wie oft er vorkommt oder die Anzahl des Vorkommens auswertet (über advanced array auswertung). Das was ich hier Muster ++ ++ leienhaft genannt habe ist ein regulärer Ausdruck der aber sehr verschieden sein kann und deswegen verschiedene "Hilfszeichen" braucht, damit man schwierige oder komplexe Auswertungen machen kann. In unserem Falle hast du folgende Auswertung eingestellt :
erster Parameter (vor erstem Komma) in den Klammern:
-> das Zeichen ' is klar (wie " ) der Start und Endtag für einen auszuwertenden String.
-> das Zeichen % hast du hier als "Delimiter" benutzt (kann auch ! oder / oder so sein und kennzeichnet den Beginn/Ende des regulären Ausdrucks[wird benötigt da dahinter noch Einstellunsoptionen erscheinen können])
das < oder > oder { oder } wird durch \ ignoriert (i.d. Auswertung nicht berücksichtigt oder man könnte sagen geduldet wobei sie aber wichtig sind um das Suchmuster zu finden, weshalb sie dennoch eingetragen sind aber zB. nicht in der Backreferenz gespeichert würden)
-> die Klammern dienen zum Markieren und Umfassen einer Gruppe von Zeichen die hier durch das nutzen der Sonderzeichen "." beliebig (und durch "*" beliebig viele einschließl. 0) sein dürfen und immer als Treffer indentifiziert werden würden. (Punkt und Stern sind in regulären Ausdrücken Symbole für eine ganze Zeichengruppe wodurch man gewährleistet, dass hier jeder String ausgewertet wird)
->\1\ versteh ich leider nicht, aber ich vermute es hat mir der Anzahl des Vorkommens des schließenden Tagslashes zu tun ? Halt! Nene - jetzt hab ichs *Knowledge Orgasmus krieg * : das is ne Backreference!! die besagt das zw </> die selbe Zeichenfolge enthalten sein muss wie in Gruppe "(1)" !! Haha! Sonst gilt dat janze nisch als Treffer *lol* - richtig?? da hätte auch {1} stehen künne, gell?
-> naja und "s" und "i" ist halt wie angedroht nach dem wieder schließenden %
eine Konfiguration wie gesucht wird: s = Suche wird auf jede Zeile neu angewandt und i = Groß oder Kleinschreibung ist "egal".
---
im 2. Parameter steht der String oder in unserem Fall die Variable ($text) die den String enthält, der geprüft werden soll.
im 3. Parameter werden die gefundenen Stringschnipsel in ein array (variable das zum array wird) gespeichert.
und der letzte Parameter ist wieder eine Konfiguration darüber wie in dem array gespeichert wird, da ja die Suchergebnisse ganz unterschiedlich benötigt werden. In unserem Falle wird jede neue Übereinstimmung erstmal komplett (inklusive der Zeichen nach "\" [warum das so ist, keine Ahnung!]) in einem neuen Unterarray gespeichert und die Gruppen in einzelne Values zerlegt, was durch PREG_SET_ORDER festgelegt wird.
das heißt wir haben 2 Übereinstimmungen: bei "<title>{hptitle}</title>" und bei "<body>{cms}</body>" richtig? Und jeweils drei Gruppen also ein array mit 2 unter arrays in denen unter id 0 jeweils der gesamte string und in dessen unterarrays jeweils die drei gruppen gespeichert sind.
in dem darauf folgenden Teil wird das array so ausgewertet dass wir am ende ein array haben in denen uns der start tag und der platzhalter gegenüber stehen als key und value...
ich denke die ausgabe echo muss ich nicht erklären
richtig soweit ?? *aufgeregt guck*
warum bei der neuzuordnung das so aussehen muss: $treffer[$match[1]] = $match[2] - hab ich zwar nicht gecheckt aber das find ich auch noch heraus
Liebe Grüße und Danke für die Denkansätze, WL
Part 1 ist klar - Variable wird mit Text (HTML) gefüllt (in diesem Beispiel).
Part 2 -
PHP-Code:
preg_match_all()
PHP-Code:
preg_match_all('%\<(.*)\>\{(.*)\}\</\\1\>%si', $text, $matches, PREG_SET_ORDER);
-> das Zeichen ' is klar (wie " ) der Start und Endtag für einen auszuwertenden String.
-> das Zeichen % hast du hier als "Delimiter" benutzt (kann auch ! oder / oder so sein und kennzeichnet den Beginn/Ende des regulären Ausdrucks[wird benötigt da dahinter noch Einstellunsoptionen erscheinen können])
das < oder > oder { oder } wird durch \ ignoriert (i.d. Auswertung nicht berücksichtigt oder man könnte sagen geduldet wobei sie aber wichtig sind um das Suchmuster zu finden, weshalb sie dennoch eingetragen sind aber zB. nicht in der Backreferenz gespeichert würden)
-> die Klammern dienen zum Markieren und Umfassen einer Gruppe von Zeichen die hier durch das nutzen der Sonderzeichen "." beliebig (und durch "*" beliebig viele einschließl. 0) sein dürfen und immer als Treffer indentifiziert werden würden. (Punkt und Stern sind in regulären Ausdrücken Symbole für eine ganze Zeichengruppe wodurch man gewährleistet, dass hier jeder String ausgewertet wird)
->\1\ versteh ich leider nicht, aber ich vermute es hat mir der Anzahl des Vorkommens des schließenden Tagslashes zu tun ? Halt! Nene - jetzt hab ichs *Knowledge Orgasmus krieg * : das is ne Backreference!! die besagt das zw </> die selbe Zeichenfolge enthalten sein muss wie in Gruppe "(1)" !! Haha! Sonst gilt dat janze nisch als Treffer *lol* - richtig?? da hätte auch {1} stehen künne, gell?
-> naja und "s" und "i" ist halt wie angedroht nach dem wieder schließenden %
eine Konfiguration wie gesucht wird: s = Suche wird auf jede Zeile neu angewandt und i = Groß oder Kleinschreibung ist "egal".
---
im 2. Parameter steht der String oder in unserem Fall die Variable ($text) die den String enthält, der geprüft werden soll.
im 3. Parameter werden die gefundenen Stringschnipsel in ein array (variable das zum array wird) gespeichert.
und der letzte Parameter ist wieder eine Konfiguration darüber wie in dem array gespeichert wird, da ja die Suchergebnisse ganz unterschiedlich benötigt werden. In unserem Falle wird jede neue Übereinstimmung erstmal komplett (inklusive der Zeichen nach "\" [warum das so ist, keine Ahnung!]) in einem neuen Unterarray gespeichert und die Gruppen in einzelne Values zerlegt, was durch PREG_SET_ORDER festgelegt wird.
das heißt wir haben 2 Übereinstimmungen: bei "<title>{hptitle}</title>" und bei "<body>{cms}</body>" richtig? Und jeweils drei Gruppen also ein array mit 2 unter arrays in denen unter id 0 jeweils der gesamte string und in dessen unterarrays jeweils die drei gruppen gespeichert sind.
in dem darauf folgenden Teil wird das array so ausgewertet dass wir am ende ein array haben in denen uns der start tag und der platzhalter gegenüber stehen als key und value...
ich denke die ausgabe echo muss ich nicht erklären
richtig soweit ?? *aufgeregt guck*
warum bei der neuzuordnung das so aussehen muss: $treffer[$match[1]] = $match[2] - hab ich zwar nicht gecheckt aber das find ich auch noch heraus
Liebe Grüße und Danke für die Denkansätze, WL
Kommentar