Jonny 5: Code kürzen?

Beitrag lesen

Hallo Ingrid,

$site_edit_start = '<!-- START MAIN //-->';
$site_edit_end = '<!-- END MAIN //-->';
if(preg_match_all('~(?<='.str_replace("<!-- ", "", $site_edit_start).').*(?='.str_replace(" > //-->", "", $site_edit_end).')~sU',file_get_contents($site_name),$out))
{

Warum das str_replace? Vielleicht hat dich mein Suchmuster verwirrt, hatte einen Teil deiner ursprünglichen Begrenzer, der mir unnötig schien weggelassen.

  
if(preg_match_all('~(?<='.$site_edit_start.').*(?='.$site_edit_end.')~sU',file_get_contents($site_name),$out)) { ...  

for($x=2;$x<sizeof($out[0]);$x++)

Gehe es doch einfacher mit foreach durch:

  
  foreach($out[0] AS $v) {  
    var_dump($v);  
  }  

Wäre das Ganze auch möglich, wenn $site_edit_start und $site_edit_end gleiche Werte haben?

Möglich schon, nur würde das Ergebnis ev. von dem abweichen, was du erwartest.
Beispielsweise 1<!-- INHALT //-->2<!-- INHALT //-->3<!-- INHALT //-->4<!-- INHALT //-->
Das Suchmuster würde 2,3 und 4 liefern. Wenn es nur paarweise matchen soll, dann besser so, wie zuvor schon erwähnt:

  
preg_match_all('~(?:<!-- INHALT //-->).*(?:<!-- INHALT //-->)~sU'  

Gäbe dann 2 und 4 zurück.

Wenn man ?: nach der öffnenden Klammer schreibt, geht der zutreffende Inhalt nicht in das Ergebnis-Array. Benötigst <!-- INHALT //--> ja nur als Begrenzer.

Viel Erfolg und lG,
Jonny 5