Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
folgende codezeile für mich unverständlich [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
ebiz-webhosting
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
folgende codezeile für mich unverständlich


 
lx-club
16-01-2004, 14:13 
 
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!

 
lx-club
16-01-2004, 14:21 
 
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?

 
lx-club
16-01-2004, 14:31 
 
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!

 
wahsaga
16-01-2004, 14:46 
 
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 ...?

 
lx-club
16-01-2004, 16:18 
 
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.

 
beebob
16-01-2004, 17:54 
 
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:

 
lx-club
16-01-2004, 19:35 
 
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:]&nbsp;</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);

 
beebob
16-01-2004, 19:50 
 
ja, stimmt, sorry.
mann muss ja auch mal wissen wann schluss is :)

 
lx-club
16-01-2004, 19:54 
 
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);

 
lx-club
16-01-2004, 20:35 
 
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);

 
lx-club
16-01-2004, 20:53 
 
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.

 
lx-club
16-01-2004, 21:07 
 
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.

 
Wurzel
16-01-2004, 21:11 
 
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


Alle Zeitangaben in WEZ +2. Es ist jetzt 14:49 Uhr.