reguläre Ausdrücke werden von links nach rechts ausgewertet, ok.
Aber anscheinend werden Sie von außen nach innen angewandt.
Mein Problem: in "abc adc" wird auf der Suche nach "/a(.*)c/" statt "b" und "d" die Zeichenfolge "bc ad" gefunden.
Ich meine ich hätte mal einen Schalter gesehen, mit dem man das Verhalten abstellen kann, aber wo war das und/oder wie hieß der?
Mit negierenden Zeichenklassen geht´s übrigens nicht, da meine a und c jeweils bestimmte HTML-Kommentare sind.
Kann man vielleicht irgendwie dafür sorgen, das in einem geklammerten Ausdruck eine bestimmte Zeichenkette (z.B. "<!--") nicht vorkommen darf?
So sieht das momentan aus, aber ich find meine Lösung nicht mehr:
Der Fehler beim zweiten String ist ja noch zu ertragen, da die übrig bleibenden HTML-Kommentare nicht angezeigt werden - aber beim letzten ist das fatal.
Aber anscheinend werden Sie von außen nach innen angewandt.
Mein Problem: in "abc adc" wird auf der Suche nach "/a(.*)c/" statt "b" und "d" die Zeichenfolge "bc ad" gefunden.
Ich meine ich hätte mal einen Schalter gesehen, mit dem man das Verhalten abstellen kann, aber wo war das und/oder wie hieß der?
Mit negierenden Zeichenklassen geht´s übrigens nicht, da meine a und c jeweils bestimmte HTML-Kommentare sind.
Kann man vielleicht irgendwie dafür sorgen, das in einem geklammerten Ausdruck eine bestimmte Zeichenkette (z.B. "<!--") nicht vorkommen darf?
So sieht das momentan aus, aber ich find meine Lösung nicht mehr:
Code:
$in = array ( '1<!--b-->2<!--/-->3', '1<!--b-->2<!--/-->3<!--b-->4<!--/-->5', '1<!--a-->2<!--/-->3', '1<!--a-->2<!--/-->3<!--a-->4<!--/-->5' ); $reg = array( '/<!--b-->(.*)<!--\/-->/s', '/<!--a-->(.*)<!--\/-->/s' ); $soll = array('123', '12345', '13', '135'); $out = preg_replace($reg, array('$1'), $in); for ($i=0; $i<4; $i++) echo htmlentities($soll[$i]), '<br>', htmlentities($out[$i]), '<br>', (strcmp($soll[$i], $out[$i]) ? 'falsch':'ok'), '<hr>';
Kommentar