Aufbau einer preg_replace Anweisung

fanste

Erfahrenes Mitglied
n Abend.

Hab da mal eine Frage bezüglich preg_replace. Wie muss ich eine Anweisung aufbauen, damit nur der Code aus einer Datei rausgefiltert und in einer Variable gespeichert wird, der zwischen
<!-- BEGINN BEITRÄGE -->
und
<!-- END BEITRÄGE -->
steht

Kenn mich mit solchen Anweisungen noch überhaupt nicht aus

Würde mich sehr freuen, wenn mir das jemand sagen könnte

mb fanste
 
Hallo,

wenn du das hier durch hast, müsstest du es selber können.

mfg
forsterm


<edit by Sven Mintel>
Hab den gelöschten Beitrag wieder hergestellt. Gelöschte Beiträge können wir jederzeit wiederherstellen... das nächste mal einfach einem Mod bescheidgeben;)
</edit>
 
Hallo.

Habs jetzt mal so ähnlich gemacht, wie es bei den PHPbb Codes ist:
PHP:
$tpl = preg_replace('<!-- BEGINN BEITRÄGE -->(.*)<!-- END BEITRÄGE -->','\\1',$tpl);
allerdings bekomme ich da eine Fehlermeldung:
Code:
Warning: Unknown modifier '(' in c:\wampp1\htdocs\tpl\untitled7.php on line 20

Setze ich dann noch ein start und endzeichen dazu (habe ich in einem anderen Beitreg mal gelesen, weiß aber nicht mehr wo), also:
PHP:
$tpl = preg_replace('@<!-- BEGINN BEITRÄGE -->(.*)<!-- END BEITRÄGE -->@','\\1',$tpl);
läuft der PHP einfach durch die Anweißung ohne etwas herauszufiltern.

Nebenbei noch, der Code soll aus volgendem HTML-Code gefiltert werden

Code:
.....
	<td width="129" height="19" bgcolor="#666666" style="border:2px solid;">&nbsp;</td>
	<td width="130" height="19" bgcolor="#666666" style="border:2px solid;">&nbsp;</td>
	<td width="119" height="19" bgcolor="#666666" style="border:2px solid;">&nbsp;</td>
</tr>
<!-- BEGINN BEITRÄGE -->
<tr>
	<td width="57" height="76" bgcolor="#818181" style="border:2px solid;">
	<p align="center"><img border="0" src="{F_STATUS_IMG}"></td>
	<td width="550" height="76" bgcolor="#818181" style="border:2px solid;">
	<b>{F_NAME}</b><br>
	<font size="2">{F_DESC}</font><br>
	<span style="font-size: 8pt"><u>{F_N_MOD}</u>: {F_MOD}</span></td>
	<td width="129" height="76" bgcolor="#818181" style="border:2px solid;" align="center">{F_A_THEMEN}</td>
	<td width="130" height="76" bgcolor="#818181" style="border:2px solid;" align="center">{F_A_BEITRÄGE}</td>
	<td width="119" height="76" bgcolor="#818181" style="border:2px solid;" align="center">{F_L_BEITRAG}</td>
</tr>
<!-- END BEITRÄGE -->
<!-- END KATEGORIE -->
<tr>
	<td width="985" colspan="5" height="19" style="border:2px solid;">&nbsp;</td>
</tr>
<tr>
	<td width="985" colspan="5" height="19" bgcolor="#666666" style="border:2px solid;">Infos:</td>
</tr>
.....

Hab ich die komplett falsch aufgebaut, oder kann der des einfach nicht finden, weil der text nicht in einer Zeile steht

mb fanste
 
Hallo,

die dämlichen RegEx sind so verdammt nützlich, dass man nicht um sie rumkommt. Leider wollen die nie so, wie ich. Wenn du die Lösung hast (habe ein ähnliches Problem) dann Poste sie doch bitte.

Oder vielleicht kann mir einer der Herren, die mehr durchsteigen als ich sagen warum mir folgender Code nicht einfach das ausgiebt was zwischen <> und >< steht, sondern auch, was dahinter steht (nicht aber das ><):
PHP:
<?php
  	$zeichenkette = 'sFfkAä ä?ssö
  sdlfk sd ölkasd <> Ich du er si
  e Es Wäre ä#aä$ >< sadlö
  jö lAäö,x.?sjf öljdf';
  	$suchmuster = "/.*\<\>(.*)\>\<.*/isU";
  	$ersetzung = "$1";
  	echo preg_replace($suchmuster, $ersetzung, $zeichenkette);
  ?>
Wichtig wäre mir hierbei, dass die ganzen Sonderzeichen, Leerzeichen und Zeilenumbrüch bleiben wie sie sind.

Edit:
Mit diesem Suchmuster funktioniert es, was ich mir absolut nicht erklären kann. Vorher sind alle nicht Gierig und hire nur das mit der Klammer nicht: /.*\<\>(.*?)\>\<.*/is
 
Zuletzt bearbeitet:
con-f-use hat gesagt.:
Oder vielleicht kann mir einer der Herren, die mehr durchsteigen als ich sagen warum mir folgender Code nicht einfach das ausgiebt was zwischen <> und >< steht, sondern auch, was dahinter steht (nicht aber das ><)

preg_replace() ersetzt etwas, wie der Name vermuten lässt.
Wenn du Suchergebnisse brauchst, verwende preg_match() und preg_match_all()
 
Hallo.
Ich habs jetzt schonmal soweit, dass es mir den Code zwischen
<!-- BEGINN BEITRÄGE -->
und
<!-- END BEITRÄGE -->
ausließt, wenn alles in einer Zeile steht. Da ich die Datei aber mit
$tpl = file('datei.htm')
einlese, klappt das nicht, da die Datei dann
1. in einem Array steht
und
2. somit nicht in einer Zeile.
Wie muss ich es dann machen
Wenn ich dem sag, dass er alles als eine Zeile lesen soll, klappts trotzdem nicht.
Was muss ich da machen, damit das Funktioniert?

Am Ende muss in der Variable $tpl
das hier drinstehen
Code:
<tr>
	<td width="57" height="76" bgcolor="#818181" style="border:2px solid;">
	<p align="center"><img border="0" src="{F_STATUS_IMG}"></td>
	<td width="550" height="76" bgcolor="#818181" style="border:2px solid;">
	<b>{F_NAME}</b><br>
	<font size="2">{F_DESC}</font><br>
	<span style="font-size: 8pt"><u>{F_N_MOD}</u>: {F_MOD}</span></td>
	<td width="129" height="76" bgcolor="#818181" style="border:2px solid;" align="center">{F_A_THEMEN}</td>
	<td width="130" height="76" bgcolor="#818181" style="border:2px solid;" align="center">{F_A_BEITRÄGE}</td>
	<td width="119" height="76" bgcolor="#818181" style="border:2px solid;" align="center">{F_L_BEITRAG}</td>
</tr>


edit: Ok das mit dem Array hab ich jetzt. füg die einzelnen Zeilen einfach mit implode() zusammen. Klappt aber trozdem noch nicht so ganz. das wird mir genauso ausgegeben wie es eingelesen wird

Auserdem sceint der immer etwas zu finden.
Wenn es so ist, findet er etwas,
PHP:
$str = '<!-- BEGINN BEITRAGE -->jjjjjjjjjjjjjjjjjjjjj<!-- END BEITRAGE -->'
	  .'<!-- BEGINN BEITRAGE -->iiiiiiiiiiiiiiiiiiiii<!-- END BEITRAGE -->';
  
$str1 = preg_replace("#<!-- BEGINN BEITRAGE -->(.*)<!-- END BEITRAGE -->/Uis#","<anfang>$1</ende>",$str);
if($str1==true){
 echo "gefunden";
 echo $str1;
}else{
 echo "nicht gefunden";
}

und wenn es so ist auch:
PHP:
$str = '<!-- BEGINN BEITRAAGE -->jjjjjjjjjjjjjjjjjjjjj<!-- END BEITRAAGE -->'
	  .'<!-- BEGINN BEITRAAGE -->iiiiiiiiiiiiiiiiiiiii<!-- END BEITRAAGE -->';
  
$str1 = preg_replace("#<!-- BEGINN BEITRAGE -->(.*)<!-- END BEITRAGE -->/Uis#","<anfang>$1</ende>",$str);
if($str1==true){
 echo "gefunden";
 echo $str1;
}else{
 echo "nicht gefunden";
}
Wie man hier sieht, hat der zu durchuchende Text BEITRAAG mit 2 A. gesucht weden soll aber nach BEITRAG mit 1 A.

Warum findet der immer etwas?
 
Zuletzt bearbeitet:
Kann mir den wirklich keiner helfen.
Oder könnte einer so freundlich sein und mir eine preg_replace Anweisung zusammenschustern
 
PHP:
$str = '<!-- BEGINN BEITRAGE -->jjjjjjjjjjjjjjjjjjjjj<!-- END BEITRAGE -->'
	  .'<!-- BEGINN BEITRAGE -->iiiiiiiiiiiiiiiiiiiii<!-- END BEITRAGE -->';
  
$str1 = preg_replace("#<!-- BEGINN BEITRAGE -->(.*)<!-- END BEITRAGE -->#Uis","<anfang>$1</ende>",$str);

echo htmlentities($str1);

Waren nur flüchtikeitsfehler.
Aber die Modifier gehören hinder den Delimiter.
Aber wieso machst du <anfang>blabla</ende> und nicht einfach <beitrag>blabla</beitrag>? Denn das mit dem anfang und /ende finde ich gar nicht schön.

MFG
redX

Edit:
Hör auf zu drängeln wenn dir nicht sofort jemand hilft!
 
Zuletzt bearbeitet:
Zurück