[REGEX] Problem mit Referenzen

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • [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

    Comment


    • #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.

      Comment


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

        Comment


        • #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...

          Comment


          • #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); 

            Comment


            • #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.

              Comment


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

                Comment

                Working...
                X