reguläre Ausdrücke: ereg("p.*dd",....)
asdf (Robert)
- php
0 Alfred0 Cheatah0 asdf (Robert)
Hallo!
Ich wollte gerade alle Teile in einem String die mit <?php beginnen bis ?> mit "irgendetwas anderem" ersetzten.
Code:
ereg_replace("<?php.*?>","aaa",$string);
Wenn ich als $string jetzt habe:
<?phpdasfasdf?> funktioniert alles prächtig.
Wenn ich habe:
<?php fsadfasd ?> ?>
will ich das "aaa ?>" zurückgegeben wird. Es wird vom ersten "<?php" bis zum letzten "?>" im $string alles ersetzt es soll aber
nur von einem "<?php" bis zum nächsten "?>" alles ersetzt werden.
Kann mir einer sagen wie ich das machen kann?
Danke
MFG Robert
Hallöchen,
Probiers mal mit
( Schnellschuß, keine Gewähr ;-) )
<?php.+??>
also statt ".*" ".+?"
( Oh mann diese Syntax... )
Besten Gruß,
Alfred
Hi,
es soll aber
nur von einem "<?php" bis zum nächsten "?>" alles ersetzt werden.
Greediness, siehe andere Antwort. Das hilft aber auch nicht gegen
<?php echo "?>" ?>
oder
<?php ereg_replace("<?php.+??>","aaa",$string) ?>
Du bist an die Grenzen von Regular Expressions gestoßen und möchtest ein Parsing vornehmen. Oder Dein Vorhaben durch etwas anderes ersetzen.
Cheatah
Hallo Cheatah!
Das hilft aber auch nicht gegen
<?php echo "?>" ?>
oder
<?php ereg_replace("<?php.+??>","aaa",$string) ?>
Klasse - da hab ich nun so _gar nicht_ dran gedacht... ;-)
Also muß er verschachtelte Vorkommen der Suchbedingung vermeiden - vielleicht mit ( um bei diesem Beispiel zu bleiben ):
<?php ereg_replace($blabla,"aaa",$string) ?>
mit
$blabla = "<?php.+??>"; // geht das überhaupt?
und ansonsten "<" und ">" die als Text gemeint sind ( denn woher sollten sie sonst kommen ) maskieren ( mit "<" etc.) ?
Interessiert mich....
Gruß,
Alfred
Hi,
Also muß er verschachtelte Vorkommen der Suchbedingung vermeiden
also das Vorkommen der Suchbedingung im PHP-Code.
$blabla = "<?php.+??>"; // geht das überhaupt?
Macht keinen Unterschied. Du kannst links "<?php" und rechts "?>" hinzufügen - ist exakt das selbe.
und ansonsten "<" und ">" die als Text gemeint sind ( denn woher sollten sie sonst kommen ) maskieren ( mit "<" etc.) ?
Das ist nur möglich innerhalb von HTML - und dort sogar nötig. Also keine Veränderung.
Interessiert mich....
A propos Veränderung: Die Suchbedingung muss verändert werden, und jedes andere Vorkommen der Zeichenkette, beispielsweise durch Stringverknüpfung oder Maskierung. Und zwar in _jedem_ Script, welches durchsucht werden soll - ob von Robert oder nicht. Nein, er möchte ein Parsing durchführen, keine RegExp verwenden. Oder sein Vorhaben an sich modifizieren.
Cheatah
Hallo!
<?php.+??>
Danke erstmal!
Zuerst ging garnichts mit dem .+? hier.
Dann habe ich gelesen das das mit ereg_replace nicht geht.
Also habe ich preg_replace verwendet. Alles klappt wie es soll, bis auf eine kleinigkeit.
Hier erstmal ein klieiner Quelltext den ich geschrieben hab damti man es sich besser vorstellen kann:
<?php
import_request_variables('gp','url_');
echo preg_replace("<?php.+??>","aaa",$url_name);
?>
<form action="login.php" method=post>
<textarea name="name">
</textarea>
<input type="submit">
</form>
Anwendung: http://ikt.bg9.at/~rchiryai/login.php
das Problem ist nach denm Ersetzten sollte aus solchen Zeichenketten:
"<?php irgendwas ?>"
das hier werden:
"aaa"
es wird aber:
"<aaa>" <--- das sieht man wenn man dann den Quelltext betachtet.
Koennt ihr mir sagen warum das so ist?
Und wenn möglich hätte ich gern gewusst wo ich nachlesen kann wie .+? arbeitet.
Danke Robert
Hi,
das Problem ist nach denm Ersetzten sollte aus solchen Zeichenketten:
"<?php irgendwas ?>"
das hier werden:
"aaa"
es wird aber:
"<aaa>" <--- das sieht man wenn man dann den Quelltext betachtet.
weil < und > im regulären Ausdruck für Wortanfang und Wortende stehen. Dein RE matcht also nur
?php irgendwas ?
Wenn die < und > nicht als Wortanfang/-ende gedacht sind, sondern als tatsächliche Zeichen, müssen sie - genauso wie die ? - escapet werden.
cu,
Andreas
Hallo,
das Problem ist nach denm Ersetzten sollte aus solchen Zeichenketten:
das Problem ist, dass ich einfach noch keine Ahnung von preg_replace hatte.
Escapen von < und > machts nicht.
Aber wenn man !<?php(.+?)?>!, auf die Rufzeichen deutend, benutzt
geht alles hervorragend.
Gutentag Robert