asdf (Robert): reguläre Ausdrücke: ereg("p.*dd",....)

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

  1. Hallöchen,

    Probiers mal mit

    ( Schnellschuß, keine Gewähr ;-) )

    <?php.+??>

    also statt ".*"  ".+?"

    ( Oh mann diese Syntax... )

    Besten Gruß,

    Alfred

  2. 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

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. 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 "&lt" etc.) ?

      Interessiert mich....

      Gruß,

      Alfred

      1. 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 "&lt" 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

        --
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
  3. 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

    1. Anwendung: http://ikt.bg9.at/~rchiryai/login.php

      schlim schlimm schlimm

      Falsche addresse

      http://ikt.bg9.at/~rchiryai/az/login.php

    2. 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 ?

      • und ersetzt auch nur diesen Teil.

      Wenn die < und > nicht als Wortanfang/-ende gedacht sind, sondern als tatsächliche Zeichen, müssen sie - genauso wie die ? - escapet werden.

      cu,
      Andreas

      --
      MudGuard? Siehe http://www.mud-guard.de/
      1. 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