[REGEX] Problem mit Referenzen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [REGEX] Problem mit Referenzen

    Hi,

    ich hab ein kleines Verständnissproblem mit den Referenzen bei Regulären-Ausdrücken.

    Folgendes möchte ich ereichen.

    PHP-Code:
    <?php
      $url 
    "http://thirdlevel.example.com";
      
      
    //...
      
      
    echo $url_new// gibt "http://thirdlevel2.example.com" aus
    ?>

    Ich brauche also eine RegEx die den Text zwischen "http://" und dem ersten "." rausnimmt, eine Zahl dranhängt und wieder einsetzt.
    preg_replace() scheint mir geeignet.

    Mein Ansatz war folgender;

    PHP-Code:
    <?php
      $url 
    "http://thirdlevel.example.com";
      
    $zahl 2;

      
    $regex "![url]http://[/url](\w+)[.]!";
      
    $url_new preg_replace($regex"$1".$zahl$url);
      
      echo 
    $url_new// gibt leider nur "example.com" aus.
    ?>
    Wenn ich $zahl weglasse und nur "$1" nutze kommt "thirdlevelexample.com" herraus.

    Hier nochmal die benutzte RegEx, weil der BBCode es verschandelt.
    $regex = "!http://(\w+)[.]!";

    Ich dachte durch die mit den () in der Regex gebe ich den Teil an, der die Referenz bildet und somit nur ersetzt wird.

    Any ideas?

  • #2
    Mal ungetestet:

    PHP-Code:
    <?php
      $url 
    "http://thirdlevel.example.com";
      
    $zahl 2.".";

      
    $regex "!http://(w+)[.]!e";
      
    $url_new preg_replace($regex'$1.$zahl'$url);
      
      echo 
    $url_new;
    ?>
    MfG

    Kommentar


    • #3
      Den Punkt mußt du noch escapen und eine Klasse brauchts dafür auch nicht. Also '\.' statt '[.]'. Außerdem wäre der Modifier U angebracht, denn es soll ja unbedingt der erste Punkt sein.

      Kommentar


      • #4
        Warum nicht mit explode?
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #5
          Explode wäre eine Idee, dann muss ich aber vorher die Sache mit parse_url auseinandernehmen und dann wieder zusammen bauen. Sagen wir so, das wäre für mich die nächste Lösung.
          Ich würde es aber gerne mit der RegExp schaffen, auch um mich noch ein wenig mehr damiz zu beschäftigen.

          Soweit bin jetzt:
          PHP-Code:
          <?php
            $url 
          "http://thirdlevel.example.com";
            
          $zahl 2;
            
            
          $regex "!http:\/\/(\w+)\.!eU";
            
          $url_new preg_replace($regex'$1."$zahl"'$url);
            
            echo 
          $url_new// gibt "thirdlevel2example.com" aus.
          ?>
          Ob Ungreedy oder nicht, macht keinen Unterschied. Ich habe aber immernoch das Problem.
          Irgendwie verstehe ich nicht, warum das "http.." mitersetzt wird...

          Kommentar


          • #6
            Ich finde preg_replace() hierfür etwas overkillig&copy;.
            PHP-Code:
              $url 'http://thirdlevel.example.com';
            $zahl 2;
            $firstdot strpos($url'.');
            echo 
            substr($url0$firstdot).$zahl.substr($url$firstdot); 

            Kommentar


            • #7
              Danke onemorenerd - die Idee hatte ich auch eben und habs schon umgesetzt. Ich laß es auch jetzt so.

              Ich werde mich wohl noch ein wenig mehr mit Referenzen in regulären ausdrücken vertraut machen müssen.

              Dank euch.

              Kommentar


              • #8
                PHP-Code:
                $url explode('.'$url2);
                echo 
                implode($zahl.'.'$url); 
                Ich denke, also bin ich. - Einige sind trotzdem...

                Kommentar

                Lädt...
                X