Archiv verlassen und diese Seite im Standarddesign anzeigen : folgende codezeile für mich unverständlich
hi...
habe hier im forum mal nach beiträgen zu templates gesucht.
folgende zeile ist mir nicht ganz klar:
ereg_replace("(.*)<!-- BEGIN $name -->(.*)<!-- END $name -->(.*)", "\2", $this->tpl);
was hat die "\2" zu bedeuten?
im originalstand "\2" und nicht nur "2"
und sorry... thema müsste verschoben werden, hab ich nicht drauf geachtet
Happy Nihilist 16-01-2004, 14:16 Guck ins Manual!
hab ich ja schon... hab das trotzdem nicht ganz kapiert
Happy Nihilist 16-01-2004, 14:23 string ereg_replace ( string Suchmuster, string Ersatz, string Zeichenkette)
Diese Funktion durchsucht Zeichenkette nach Übereinstimmungen mit Suchmuster und ersetzt dann den übereinstimmenden Text durch Ersatz.
Was ist bitte daran nicht zu kapieren?
Original geschrieben von Happy Nihilist
Was ist bitte daran nicht zu kapieren?
was es mit der "\2" auf sich hat als string, der das suchmuster ersetzen soll. es wird doch da nicht "\2" in die datei geschrieben.
Happy Nihilist 16-01-2004, 14:33 Wie es scheint ja schon!
Original geschrieben von lx-club
was es mit der "\2" auf sich hat als string, der das suchmuster ersetzen soll. es wird doch da nicht "\2" in die datei geschrieben.
http://www.php.net/manual/de/function.ereg-replace.php
Wenn Suchmuster eingeklammerte Teilzeichenketten enthält, darf Ersatz Teilzeichenketten der Form \\Ziffer enthalten, die dann durch die Ziffer'ste Teilzeichenkette ersetzt werden. \\0 erzeugt den gesamten Inhalt der durchsuchten Zeichenkette. Bis zu neun Teilzeichenketten dürfen verwendet werden.
und was kapierst du daran nicht ...?
ich habs mir jetzt mehrmals durchgelesen und nun weiss ich wie das zusammenhängt. die erklärung im manual hab ich vorhin nicht so richtig verstanden.
ich hab mir zu testzwecken mal ein script gemacht und mir dann mal die ausgabe angesehen.
nun ist das problem, das das script ewig lang braucht, wenn ich mir
$block = ereg_replace("(.*)<!-- BEGIN -->(.*)<!-- END -->(.*)", "\\2", $maintpl);
echo $block;
das ausgeben lasse.
ist das so normal?
invitatoinvitat 16-01-2004, 17:03 was spricht gegen testen.
hi!
mach das lieber mal mit preg_replace().
ereg is zu lahm. (\2 mit \\2 ersetzen!)
der ausdruck ersetzt halt den text in der 2. klammer mit $maintpl...
$block = preg_replace("/(.*)<!-- BEGIN -->(.*)<!-- END -->(.*)/", "\\2", $maintpl);
gruss
beebob :huep:
Original geschrieben von beebob
$block = preg_replace("/(.*)<!-- BEGIN -->(.*)<!-- END -->(.*)/", "\\2", $maintpl);
ich habe das jetzt mal auf folgende datei angewandt:
... <table bgcolor="#D6E0EA" class="rahmen" width="700" align="center" cellpadding="0" cellspacing="10" border="0">
<tr>
<td>
<form method="post" action="[:Target:]">
<table width="250" cellpadding="0" cellspacing="0" border="0">
<tr><th colspan='2' height="16">1. Menüpunkt auswählen</th></tr>
</table><br>
<table width="250" class="rahmen" cellpadding="0" cellspacing="0" border="0">
<!-- BEGIN -->
<tr>
<td width="50">[:radio:]</td>
<td>[:Baum:] </td>
</tr>
<tr>
<td colspan="2" class="blank"></td>
</tr>
<!-- END -->
</table>
</td>
<td width="100%" valign="top">
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
<th colspan="2" height="16">2. Aktion ausführen</th>
</tr>
</table><br> ...
Leider wird gar nichts ersetzt. mir wird die komplette datei wieder angezeigt
Sebastian W 16-01-2004, 19:41 .* ist gierig.
Deswegen mußt du den modier U benutzen, oder aber .*? schreiben:
block = preg_replace("/(.*)<!-- BEGIN -->(.*)<!-- END -->(.*)/U", "$2", $maintpl);
Oder:
block = preg_replace("/(.*?)<!-- BEGIN -->(.*?)<!-- END -->(.*?)/", "$2", $maintpl);
ja, stimmt, sorry.
mann muss ja auch mal wissen wann schluss is :)
danke erstmal für die hilfe. ist ja echt ne knifflige sache mit diesen regulären ausdrücken. leider ersetzt es bei mir immer noch nix. mmir wird jedesmal die gesamte datei angezeigt. hier mal das ganze script:
<?
$maintpl = implode('',file('maintpl.htm'));
//$block = preg_replace("/(.*)<!-- BEGIN -->(.*)<!-- END -->(.*)/U", "$2", $maintpl);
$block = preg_replace("/(.*?)<!-- BEGIN -->(.*?)<!-- END -->(.*?)/", "$2", $maintpl);
echo $block;
?>
weder die eine noch die andere methode geht. :confused:
Sebastian W 16-01-2004, 20:21 @ beebob
:)
@ lx-club
Meinst du das so? - ... hab den Thread nicht ganz gelesen
$block = preg_replace("/<!-- BEGIN -->(.*)<!-- END -->/sU", "$1", $maintpl);
Nachtrag:
Wohl eher so:
$block = preg_replace("/(.*)<!-- BEGIN -->(.*)<!-- END -->(.*)/sU", "$2", $maintpl);
Original geschrieben von Sebastian W
[B
$block = preg_replace("/(.*)<!-- BEGIN -->(.*)<!-- END -->(.*)/sU", "$2", $maintpl); [/B]
das is ne verflixte kiste mit diesen ausdrücken. also jetzt gehts zur hälfte. nun wird mir alles ausgegeben ab <!-- BEGIN --> aber bei <!-- END --> ist nicht schluss. ich bekomme alles danach auch noch, und das darf nicht sein.
muss mich erstmal richtig mit diesen ausdrücken beschäftigen.
vielleicht bekomm ich es ja noch hin.
Sebastian W 16-01-2004, 20:44 Oh ja, stimmt.
Nun aber:
$block = preg_replace("/.*?<!-- BEGIN -->(.*?)<!-- END -->.*/s", "$1", $maintpl);
ich dank dir wie sau :rocks:
sag mal hast du evtl. noch nen link für mich,(wenns geht auf deutsch) wo das mal ausführlich erklärt wird mit diesen ausdrücken?
Sebastian W 16-01-2004, 21:00 Die beste Liste die ich bisher gefunden haben ist von Gerd Ewald, ein "fortgeschrittener Anfänger" ;))
http://www.regenechsen.de/regex_de/regex_liste_de.html
Danach kommt dann:
http://www.dclp-faq.de/search.php?l=20&q=regex
Viel Spaß beim lernen.
ok dann vielen dank.
mir ist auch grad eingefallen, mit preg_match wäre es wohl auch gegangen. der reg. ausdruck ist ja dann fast gleich. man bekommt dann jedoch nur 0 und 1 je nachdem ob es ne übereinstimmung gab.
kann man sich das ergebnis aber nicht auch irgendwie ausgeben lassen?
dann hätte ich denselben effekt.
ich kann ja mal überprüfen was schneller ist.
du kannst bei preg_match() die "treffer" auch in einem array speichern ...
schau mal ins manual ;)
AtomicHX3 22-01-2004, 18:40 Regex erklärt auf Deutsch und 1A
http://www.regenechsen.de/regex_de/regex_1_de.html
|
|