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
  #16 (permalink)  
Alt 01-12-2004, 05:45
Willy_Lernen
 Newbie
Links : Onlinestatus : Willy_Lernen ist offline
Registriert seit: Oct 2004
Ort: Auf dem falschen Planeten
Beiträge: 33
Willy_Lernen ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Also ich versuchs mal ... (*Oh Jeh! ...*)

Part 1 ist klar - Variable wird mit Text (HTML) gefüllt (in diesem Beispiel).

Part 2 -
PHP-Code:
 preg_match_all() 
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 :
PHP-Code:
preg_match_all('%\<(.*)\>\{(.*)\}\</\\1\>%si'$text$matchesPREG_SET_ORDER); 
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
__________________
Es gibt keine dummen Fragen, es gibt nur schlecht gestellte Fragen und ein Haufen unnützer Antworten ...

Geändert von Willy_Lernen (01-12-2004 um 05:58 Uhr)
Mit Zitat antworten
  #17 (permalink)  
Alt 01-12-2004, 09:04
mrhappiness
 PHP Guru
Links : Onlinestatus : mrhappiness ist offline
Registriert seit: Oct 2002
Beiträge: 14.890
mrhappiness ist zur Zeit noch ein unbeschriebenes Blatt
mrhappiness eine Nachricht über AIM schicken mrhappiness eine Nachricht über Yahoo! schicken
Standard

Na also, es gibt sie ja doch noch die Leute, die Handbücher lesen und verstehen wollen und das auch schaffen

Zitat:
Original geschrieben von Willy_Lernen
-> 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)

[...]

-> 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".

[...]

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.

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
< > { } haben in regulären ausdrücken eine besondere bedeutung, diese besondere bedeutung sollen sie hier aber nicht haben. durch "maskieren" mit dem \ nehme ich ihnen die besondere bedeutung und sie werden als "normales zeichen" behandelt.

der modifier s (nach dem delimiter) besagt, dass durch den punkt auch zeilenumbrüche erfasst werden
Code:
<body>{cm
s}</body>
würde also auch funktionieren, das gegenteil von "s" ist "m"

bei den ergebnissen hast du im index 0 immer das komplette muster und dazu gehören auch die maskierten teile

was die neuzuordnung angeht: mach hinter print_r($treffer); mal
PHP-Code:
print_r($matches); 
das sollte zum verständnis beitragen
__________________
Ich denke, also bin ich. - Einige sind trotzdem...
Mit Zitat antworten
  #18 (permalink)  
Alt 01-12-2004, 20:39
Willy_Lernen
 Newbie
Links : Onlinestatus : Willy_Lernen ist offline
Registriert seit: Oct 2004
Ort: Auf dem falschen Planeten
Beiträge: 33
Willy_Lernen ist zur Zeit noch ein unbeschriebenes Blatt
Standard

hab ich doch schon längst ...

Frage zum Thema: ich hab das mal an einem String der html enthält probiert der wie folgt aussieht:

tpl_index.php :
PHP-Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">
<
html>
<
head>
<
meta http-equiv="content-type" content="text/html; charset=macintosh">
<
title><!-- {title} --></title
der PHP Code ist (tpl_parse): // nur beispielhaft
PHP-Code:
$text fopen("tpl_index.php""r");
$cms fgets ($text500);
preg_match_all("%\{(.*)\}%si"$cms$matchesPREG_SET_ORDER);
... 
usw// unwichtig bei dem besagten problem 
das ergebnis ist der gespeicherte Ausdruck "{title} -->"

Frage: Muss ich da den Fehler in meinem Suchmuster suchen oder hab ich ein PHP Problem auf meinem Rechner?


1000 Dank mrhappiness nochmal für deine Gedult

OffTopic:

Klar willy_lernen



Gruß
__________________
Es gibt keine dummen Fragen, es gibt nur schlecht gestellte Fragen und ein Haufen unnützer Antworten ...
Mit Zitat antworten
  #19 (permalink)  
Alt 01-12-2004, 21:10
asp2php
 Banned
Links : Onlinestatus : asp2php ist offline
Registriert seit: Feb 2004
Beiträge: 11.745
asp2php ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von Willy_Lernen

OffTopic:

Klar willy_lernen


OffTopic:
mag ja sein, aber das Forum erteilt keine Anfängerunterricht, sondern hilft bei tatsächlichen Probleme. Wenn du Grundlagen lernen möchtest, bitte nicht hier.
Mit Zitat antworten
  #20 (permalink)  
Alt 02-12-2004, 03:10
Willy_Lernen
 Newbie
Links : Onlinestatus : Willy_Lernen ist offline
Registriert seit: Oct 2004
Ort: Auf dem falschen Planeten
Beiträge: 33
Willy_Lernen ist zur Zeit noch ein unbeschriebenes Blatt
Standard

OffTopic:

Anfängerunterricht kann ich mir selber geben.
Ich habe immerhin mehrere meiner Sites auf PHP Basis gebaut und habe eine Engine entwickelt die anhand der URLs den Content verschiedener Firmendivisions und die Sprachen zuordnet und die sprachlichen Gegenübers als Links generiert. Außerdem habe ich über Applescript und PHP meine eigenst entwickelte Agenturdatenbank (Filemaker) ausgelesen und für mySQL aufbereitet. Nur ob du's glaubst oder nicht, dabei bin ich bis heute um reguläre Ausdrücke drum herum gekommen. Im übrigen halte ich es für konstruktiver mir dann den link zu posten wo "ANFÄNGER" Fragen beantwortet werden, oder eine Antwort auf mein letzteres kleines Problem. Das hätte dich die gleiche Anzahl an Bits gekostet
PHP-Code:
sinnvoll $loesung $handlung überflüssig



sorry, bin echt'n lieber Kerl, aber sowat muss nich sein!! Das grenzt ja schon an "Flaming"
Gruß, WL

PS: Wurde gefragt und hab geantwortet um zu zeigen dass ich nicht will dass mir andere meine Probleme lösen ohne dass ich es selbst versuche. War kein Unterricht.
__________________
Es gibt keine dummen Fragen, es gibt nur schlecht gestellte Fragen und ein Haufen unnützer Antworten ...

Geändert von Willy_Lernen (02-12-2004 um 03:14 Uhr)
Mit Zitat antworten
  #21 (permalink)  
Alt 02-12-2004, 03:57
inkognitus
 Banned
Links : Onlinestatus : inkognitus ist offline
Registriert seit: Nov 2004
Beiträge: 26
inkognitus ist zur Zeit noch ein unbeschriebenes Blatt
Standard

mal schauen, ob ich dich richtig verstehe:

auf der einen Seite hast Du ein template mit Platzhaltern
nach dem schema: {platzhalter}

auf der anderen eine Reihe von Strings, die anstelle der Platzhalter eingesetzt werden sollen?

Template einlesen:
Code:
    $fd = @fopen($tpl_file, 'r');
    $tpl = fread($fd, filesize($tpl_file));
Platzhalter in Variablennamen umwandeln:
Code:
    $tpl = preg_replace('/\{([a-z0-9_-]+)\}/is', "' . $\\1 . '", $tpl);
-> in den Platzhalterklammern {} dürfen sich (alphanumerische) Zeichen befinden wie a-z0-9 und _ sowie -
diese Zeichen werden als Gruppe definiert, nach der gesucht werden soll: [ ]
und davon dürfen jeweils mehrere gefunden werden also +

Klein-/Großschreibung wird ignoriert /i

es können im Platzhalter zeilenschritte vorkommen: /s

macht zusammen: /is

die gefundenden Platzhalter werden durch sich selbst ersetzt:
der erste in () befindliche reguläre Ausdruck - hier auch gleich der einzige - wird mit \1 angesprochen,
damit \ nicht als gewöhnliches Zeichen, sondern als PCRE-Bestandteil von \1 verstanden wird: \\1
also finde, was in () und ersetze es durch sich selbst mit einem vorangestellten $, suche in $tpl (worin $tpl_file eingelesen wurde).

Jetzt steht in $tpl der Inhalt deines Templates mit lauter $... statt {...}

auf der anderen seite ein assoziatives array: titel =>"Mein Titel", name =>"Mein Name" (?)

aus den keys des array kannst du dynamisch variablen erzeugen und ihnen die zugehörigen values zuweisen per
Code:
    foreach($meinarray as $key => $val) $$key = $val;
$$key: der Schlüssel titel ist nun $titel, sein Wert $val

nun willst Du die werte in dein $tpl bekommen:
Code:
    eval("\$tpl = '$tpl';");
evtl. solltest du vorher dieser Zeile alle " und '
"entschärfen" mit

Code:
 $tpl = addslashes($tpl);
ich habe keine ahnung, ob das deine Frage war, aber vielleicht hilfts



Mit Zitat antworten
  #22 (permalink)  
Alt 02-12-2004, 04:09
Willy_Lernen
 Newbie
Links : Onlinestatus : Willy_Lernen ist offline
Registriert seit: Oct 2004
Ort: Auf dem falschen Planeten
Beiträge: 33
Willy_Lernen ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Jawolllllllllll !!!!!!!!!!!!! das war meine Fraaaaaage! Danke dir !!!!!!! Wo bist du, wo kommst du her! Ich geb dir'n Bier aus oder mach'n Bauchtanz!

Ich weiß zwar noch nicht ob es der gleiche Ansatz ist wie das wo ich auch grad drann rumprobier (werdm ich gleich mal durch deine essay forsten), aber das Grundproblem was ich habe, hast du auf jeden Fall richtig gedeutet! Darum geht es!! Danke!!!

PS: Meine letzte kl. Frage scheint sich beim rumprobiern beantwortet zu haben. Auf meinem Server scheint tatsächl. Probleme zu geben ein regulären Ausdruck mit dem Muster <!--{}--> zu parsen. Ohne <!-- --> klappt mein obiges Beispiel schonmal wie ich es wollte. Schade, ahtte ich extra probiert damit lehre Platzalter im Test-HTML Durchlauf der tpl dateien nicht im Browser erscheinen, sondern als Kommentar verstanden werden. Naja - aber du hast mir auf jeden Fall Mut gemacht. Werd' gleich mal stück für stück deine Erläuterung durchgehen und gucken ob ich aufm Holzweg bin oder nicht. 100000 Dank nochmal. Meld mich hier bald wieder.

Ganz Lieben Gruß, WL
__________________
Es gibt keine dummen Fragen, es gibt nur schlecht gestellte Fragen und ein Haufen unnützer Antworten ...
Mit Zitat antworten
  #23 (permalink)  
Alt 02-12-2004, 04:13
inkognitus
 Banned
Links : Onlinestatus : inkognitus ist offline
Registriert seit: Nov 2004
Beiträge: 26
inkognitus ist zur Zeit noch ein unbeschriebenes Blatt
Standard

<!-- {abc} -->

kannst Du ersetzen durch <?/*{abc}*/?>

klar?


dann wird der reguläre ausdruck allerdings "komplex", weil ? , / , * und {
zur Sprache der Perl kompatiblen Ausdrücke PCRE gehören, sie müssen also entschärft werden
wenn sie einfache gesuchte Zeichen darstellen sollen:
Code:
$tpl = preg_replace('/<\?\/\*\{([a-z0-9_-]+)\}\*\/\?>/is', "' . $\\1 . '", $tpl);
dann musst Du strikt darauf achten, dass die schreibweise immer stimmt, sonst gibt's beim ausführen PHP-Probleme satt




Geändert von inkognitus (02-12-2004 um 04:24 Uhr)
Mit Zitat antworten
  #24 (permalink)  
Alt 03-12-2004, 04:54
Willy_Lernen
 Newbie
Links : Onlinestatus : Willy_Lernen ist offline
Registriert seit: Oct 2004
Ort: Auf dem falschen Planeten
Beiträge: 33
Willy_Lernen ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Oha! Jetzt bin ich erregt, hehe ...

ein php kommentar als verdeckter platzhalter! nicht schlecht! Jetzt bin ich echt beeindruckt!!

Ich liebe Leute die sich was einfallen lassen wenn es darauf ankommt ungewöhnliche wege zu gehen. Ist die Idee von dir? Echt Klasse! Kann man dich buchen ??

Vielen Dank, Ich habe wieder einmal geler.... nein das ist ja hier verboten! Ich wollte sagen, es wurde mir sehr weiter geholfen.


Vielen Dank und ganz lieben Gruß!

Willy

PS: Bin immernoch dabei zu schaun ob das von vorher der Weg ist für meine TPL Engine. Vielleicht müsste ich in dem Fall von vorn anfangen. Ich hatte den platzhalter_register quasi vor den eigentlichen parser und wandler gelegt und das Array übergibt wieder zurück an das tpl über eregi_replace. In deinem Fall wird das tpl in der variable komplett als php verstanden und die tags mit $ ersetzt. Ich guck mal ob ich das jetzt richtig verstanden hab, und ob das nicht eventl. das Selbe ist und meld' mich nochmal - Bin noch etwas langsam darin. Dank dir auf jeden Fall für deine unglaublich konstruktive Hilfe.

PSPS: Kann ma' eine/r das Newbie bei ihm wegmachen, das scheint mir fehl am Platz - Gruß
__________________
Es gibt keine dummen Fragen, es gibt nur schlecht gestellte Fragen und ein Haufen unnützer Antworten ...

Geändert von Willy_Lernen (03-12-2004 um 05:01 Uhr)
Mit Zitat antworten
  #25 (permalink)  
Alt 03-12-2004, 13:56
wizar
 Newbie
Links : Onlinestatus : wizar ist offline
Registriert seit: Nov 2004
Beiträge: 11
wizar ist zur Zeit noch ein unbeschriebenes Blatt
Standard

ein newbie ist der, der sich für keinen hällt!

man kann nie genug dazu lernen wenn es um php und sonstige programmiersachen geht!
Mit Zitat antworten
  #26 (permalink)  
Alt 03-12-2004, 14:11
Willy_Lernen
 Newbie
Links : Onlinestatus : Willy_Lernen ist offline
Registriert seit: Oct 2004
Ort: Auf dem falschen Planeten
Beiträge: 33
Willy_Lernen ist zur Zeit noch ein unbeschriebenes Blatt
Standard

OffTopic:

Jepp! Korrekt ... deswegen ja auch mein Nick
da hast du vollkommen recht- wie heißt es doch so schön:

Der der weiß dass er nichts weiß, der weiß schon viel !

Nur das im letzten post war eher retorisch von mir gemeint, weil er mir so viel geholfen hat und dabei so konstruktiv war wie ich es leider seltend in boards erlebe, deswegen wollte ich ihm ein Kompliment machen mit dem Satz, er ist bestimmt kein Newbie mehr, vor allem bei der Artder Lösungansätze ...


gecheckt? ...




Ganz Liebe Grüße, Willy_Lernen

PS: Ich glaub' du solltest es lieber in OT packen ...
__________________
Es gibt keine dummen Fragen, es gibt nur schlecht gestellte Fragen und ein Haufen unnützer Antworten ...
Mit Zitat antworten
Antwort

Lesezeichen


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

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

PHP Marktplatz-Software
PHP Marktplatz-SoftwareEs hat sich viel getan! Die neue Version 7.5.9 unserer PHP Marktplatz-Software ebiz-trader steht ab sofort zur Verfügung.

28.10.2019 | Berni

Die RIGID-FLEX-Technologie
Die RIGID-FLEX-TechnologieDie sogenannte "Flexible Elektronik" , oftmals auch als "Flexible Schaltungen" bezeichnet, ist eine zeitgemäße Technologie zum Montieren von elektronischen Schaltungen.

06.12.2018 | Berni


 

Aktuelle PHP Scripte

jqPlot jQuery Plotting Plugin ansehen jqPlot jQuery Plotting Plugin

jqPlot ist ein plotting und charting plugin für das jQuery Javascript framework

06.11.2019 Berni | Kategorie: AJAX/ Framework
WYSIWYG Editor

WYSIWYG Editor zum Einbinden in PHP Scripte.

21.10.2019 Stephan_1972 | Kategorie: PHP/ WYSIWYG
Modelmanager

Der Modelmanager ist ein Webtool für Fotografen, kann als komplette Homepage oder als Webtool installiert werden.

10.10.2019 Stephan_1972 | Kategorie: PHP/ Bilder
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:53 Uhr.