preg_replace mit url

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

  • preg_replace mit url

    hallo, ich hab mal wieder ein problem mit den plattern und kann es trotz intensiver suche und einiger flaschen bier nicht lösen.

    PHP-Code:
    function link ($link_name$link_id){
    $link_last=$_SERVER['SCRIPT_NAME']."?p=".$link_id."&".
    preg_replace("/p=(.*)&?/","",$_SERVER['QUERY_STRING']);
    echo 
    "<a href=".$link_last.">".$link_name."></a>";
    }
    function 
    link1 ($link_name1$link_id1){
    $link_last1=$_SERVER['SCRIPT_NAME']."?s=".$link_id1."&".
    preg_replace("/s=(.*)&?/","",$_SERVER['QUERY_STRING']);
    echo 
    "<a href=".$link_last1.">".$link_name1."></a>";


    das ganze kann sich auch auch noch erweitern in der anzahl aber funktion wird schon so gut ersichtlich nur es funktioniert nur halb,
    da der plattern das letzte vorhandene "&" sich als anhaltspunkt greift und nicht das nächste

    wie kann ich den platter dazu überreden das er sich das nächste "&" greifft und nich das letze in der zeichenkette, ist das mit den modifikatoren zu machen ?
    Zuletzt geändert von Bargus; 16.02.2007, 22:02.

  • #2
    Mit Bier ist da nichts zu machen, aber probiere es mal mit (.*?) statt (.*)

    Kommentar


    • #3
      klar bier hilft beim denken, und wenn man genug hat, kann man gut schlafen und grübelt nicht die ganze nacht und kommt auch nicht weiter

      das ? hilft mir nicht da es doch die anzahl der * begrenzt nicht oder und und das & hab ich doch schon mit nem ? auf 0 oder 1 begrenzt oder verdreh ich da was ?

      btw funktioniert nicht

      [COLOR=red]//edit:[/COLOR] doch geht wenn man noch nen bier trinkt und scharf nachdenkt

      und hier der code für alle die nicht auch zum alki werden wollen
      PHP-Code:
      $link_last=$_SERVER['SCRIPT_NAME']."?p=".$link_id."&".
      preg_replace("/p=(.*?)&/","",$_SERVER['QUERY_STRING']); 
      Becks die Ursache und Lösung aller unserer Probleme!
      Zuletzt geändert von Bargus; 16.02.2007, 22:57.

      Kommentar


      • #4
        und was hat (.*?) denn bitte für eine bedeutung?

        Kommentar


        • #5
          Original geschrieben von penizillin
          und was hat (.*?) denn bitte für eine bedeutung?
          Ist die Frage ernst gemeint oder ist das nur eine Kontrollfrage?
          Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
          var_dump(), print_r(), debug_backtrace und echo.
          Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
          Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
          Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

          Kommentar


          • #6
            ich weiß es wirklich nicht.
            mir ist gar nicht klar, was .*? matchen kann, was .* nicht matchen würde.

            Kommentar


            • #7
              Original geschrieben von penizillin
              und was hat (.*?) denn bitte für eine bedeutung?
              Beschreibung pattern syntax im Manual:
              However, if a quantifier is followed by a question mark, then it ceases to be greedy, and instead matches the minimum number of times possible
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar


              • #8
                oh, alles klar, vielen dank! ich nutze immer nur den modifier, kannte diese kombination nicht.

                Kommentar


                • #9
                  .*? würde sowenig Treffer wie möglich finden, damit der RegEx matcht.


                  Also würde der RegEx

                  /(.*?)/

                  _IMMER_ etwas matchen, nämlich einfach nichts. (weil * bedeutet "mindestens 0 mal")

                  Beispiel (über derHunds online-evaluator):
                  Klick mich (Beispiel 1)



                  Es gibt aber auch das Gegenteil:

                  /(.*+)/


                  Trifft _SOVIEL_ es geht, damit der Ausdruck noch etwas matcht.

                  Klick mich (Beispiel 2)



                  Du kannst also mit diesen beiden Quantoren die Gier "umschalten", und zwar für einzelne Quantoren und nicht gleich für den ganzen Ausdruck.

                  Possessive Quantoren (das sind die Dinger mit dem + dahinter, z.B. "++", "?+", "*+" usw..) können richtig Speed bringen, weil unnötige Schritte bei möglicherweise benötigtem Backtracking weggelassen werden. Ein gut implementierter Ausdruck mit einem possessiven Quantor kann sogar schneller sein als ein Ausdruck mit atomaren Klammern. Lohnt sich also auf jedenfall damit zu beschäftigen!
                  Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
                  var_dump(), print_r(), debug_backtrace und echo.
                  Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
                  Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
                  Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

                  Kommentar


                  • #10
                    das klingt schlüssig (und interessant!). vielen dank für die erklärung!

                    Kommentar

                    Lädt...
                    X