Problem mit Teilstring aus RegEx

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

  • Problem mit Teilstring aus RegEx

    Hi Leute,

    habe da ein Problem mit nem Teilstring aus nem RegEx.
    Ich will aus einem Regulären Ausdruck den 7 Teil nehmen und ihn in meine Funktion packen um dort zu checken ob der Wert kleiner 50 ist und dann je nach Fall den String wieder zurückgebe oder verändert zurückgebe (z.B. min. 55).

    PHP-Code:
    $suchmuster20 '/(position:)([^\{]*)(absolute)([^\}]*)(top:)([\s]*)([\d]{1,2})(px)/s';

    $pimpfeld_string preg_replace($suchmuster20top_check('$1''$2''$3''$4''$5''$6''$7''$8''$0'), $pimpfeld_string);
    } else
        {
        echo 
    "Nichts machen!!!"
        }

    echo 
    $pimpfeld_string;

    ///////////////////////////////////////////////////////////////////////////////////////////////
    function top_check($sm_part1$sm_part2$sm_part3$sm_part4$sm_part5$sm_part6$sm_zahl$sm_einheit$sm_komplett)
    {
        
        
    //echo $sm_zahl;
        //$sm_zahl = intval($sm_zahl);
        
    if($sm_zahl 50)
        {
        
    $fixed_style '<50:::'.$sm_zahl.':::'.$sm_part1 .$sm_part2 .$sm_part3 .$sm_part4 .'top:55px';
        }
        else
         {
         
    $fixed_style '>50:::'.$sm_komplett;
         }
    return 
    $fixed_style;

    Nu kann aber die Überprüfung ob der $7 Wert kleiner 50 ist nicht richtig erfolgen weil das ja ein string ist.
    Wenn da also 30 drin steht und ich dann mit

    PHP-Code:
    $sm_zahl intval($sm_zahl); 
    rangehe und das ganze mit dem return zurück kommt wird bei der Ausgabe nur 0 angezeigt.

    Wo klemmt es da nur ?

    Wäre toll wenn jemand von euch ne Idee hätte.

    Danke vorab.

    Ciao CF

  • #2
    Hi,

    intval gibt 0 zurück u. A. wenn seine Typenumwandlung erfolglos war.
    Ich persönlich verwende gerne $string+=0;

    Ich habe gerade nichts zum testen hier und muss aus dem Gedächtnis kramen, aber wenn Du an 7. Stelle eine Zahl suchst stimmt IMHO Dein Pattern nicht, da müsste [\d]{1,2} stehen wenn Du eine zweistellige zahl suchst. Momentan suchst Du nach 1 oder 2 "d", da das "d" in einer Zeichenklasse definiert ist.
    Außerdem ist das 7. Ergebnis Match $6, da bei $0 angefangen wird zu zählen. Somit übergibst Du deiner Funktion 9 Argumente, obwohl Dein Pattern nur 8 auffängt.

    Gruß,

    Hans

    Kommentar


    • #3
      Hi Hans,

      danke für die Antwort.
      Da ist irgendwie beim Text einfügen das ([\d]{1,2}) verändert worden - steht bei mir im Code schon mit \d da.
      Was deine Aussage mit $1 und $0 angeht, muss ich dir leider wiedersprechen.
      $1 ist der erste (Teil ) des RegEx.
      $0 ist der ganze RegEx, also $1.....$n

      Die Reihenfolge kanns nicht sein, denn $7 ist in der function ja $sm_zahl und die wird bei nach übergabe aus der Funktion korrekt ausgegeben. Nur in der Funktion kommt da nur 0 an oder $7 ist doch komisch.

      Wo liegt da bloss der Hund begraben ?
      Kann doch nicht viel sein.

      @Hans: Schonmal thanx

      Ciao CF

      Kommentar


      • #4
        Was deine Aussage mit $1 und $0 angeht, muss ich dir leider wiedersprechen.
        Ja, Du hast vollkommen recht - sorry!!!

        Möglicherweise wird das Callback nicht korrekt angesprochen, versuch doch mal als 2. Argument (man beachte die ->")
        "topcheck($1,$2,$3, usw... )"

        HTH,

        Hans

        Kommentar


        • #5
          Hab das mal so umgebaut dann lief es auf dem localhost, aber auf dem Server wo es hin soll plötzlich wieder diese Fehlermeldung:

          Warning: preg_replace_callback() [function.preg-replace-callback]: requires argument 2, 'top_check', to be a valid callback in...

          PHP-Code:
          if(stristr($pimpfeld_string'position') && stristr($pimpfeld_string'absolute') && stristr($pimpfeld_string'top'))
          {
          $suchmuster20 '/(position:)([^\{]*)(absolute)([^\}]*)(top:)([^0-9]*)([\d]{1,2})(px)/si';
          $pimpfeld_string preg_replace_callback($suchmuster20'top_check'$pimpfeld_string);
          }
          ///////////////////////////////////////////////////////////////////////////////////////////////
          function top_check($match)
          {
              
          $sm_zahl $match[7];
              
          $sm_zahl intval($sm_zahl);
              if(
          $sm_zahl 50)
              {
              
          $fixed_style '<50:::'.$sm_zahl.':::'.$match[1] .$match[2].$match[3].$match[4].'top:55px';
              }
              else
               {
              
          $fixed_style '>50:::'.$sm_zahl.':::'.$match[1] .$match[2].$match[3].$match[4].$match[5].$match[7].'px';
               }
          return 
          $fixed_style;

          Kannst mal bitte die genauen Syntax für meinen Anwendungsfall schreiben ?

          Die Beispiele auf php.net zur preg_replace_callback sind ja total wustig und haben durch die Bank böse Syntax-Fehler :-(

          Vielleicht hab ihr das ja schon gemacht mit der preg_replace_callback und so nem Anwendungsfall.

          Besten Dank vorab für Hilfe.

          Ciao CF

          Kommentar


          • #6
            nee, ich meinte:
            PHP-Code:
            $pimpfeld_string preg_replace($suchmuster20"topcheck($1,$2,$3,$4,$5,$6,$7,$8)"$pimpfeld_string); 
            den $0 lass mal weg

            Kommentar


            • #7
              Ne also da is ja nen Sytnax Fehler. So geht das leider net. Und warum preg_replace brauche doch nen callback.

              Ich habs so:

              PHP-Code:
              $pimpfeld_string preg_replace_callback($suchmuster20'top_check'$pimpfeld_string); 
              auf meinem localhost mit PHP 5.1.6-5 zum laufen gebracht, aber auf dem Server wo es hin soll mit PHP 5.1.6 kommt folgende Fehlermeldung:

              Warning: preg_replace_callback() [function.preg-replace-callback]: requires argument 2, 'top_check', to be a valid callback in /.../www/htdocs/...index.php on line 750
              750 ist die Codestelle die hier in diesem Beitrag steht.

              Ist doch komisch, woran kann das liegen ?

              Ciao CF

              Kommentar


              • #8
                1) stimmt der Name der Funktion die Du aufrufen willst _genau_ mit dem Namen des Callbacks überein?

                2) Hast Du meine Codezeile ausprobiert?

                Kommentar


                • #9
                  Original geschrieben von Captain Future
                  Ist doch komisch, woran kann das liegen ?
                  du kannst ja mal versuchen, die callback-funktion vor dem aufruf von preg_match_callback zu definieren.

                  Kommentar


                  • #10
                    @fiderallalla:
                    Zu 1. ja
                    Zu 2. ja ist aber von der Syntax her nicht gegangen.
                    Aber erstmal Danke.

                    @3DMax
                    du kannst ja mal versuchen, die callback-funktion vor dem aufruf von preg_match_callback zu definieren.
                    Wie meinste das denn genau ?

                    @all
                    Habe folgendes festgestellt:
                    Unter PHP Version 5.1.6-5 kommt der Fehler
                    Unter PHP 5.1.6 läuft es und
                    unter PHP 5.2.0 läufts auch.

                    Kann dann ja eigentlich nur ein Bug sein oder ?

                    Habe im Netz auch über diverse Bugs der Funktion in Versionen vor 5.1.6 gelesen.

                    P.S.: Die Doku auf php.net zu preg_replace_callback ist ziemlich schlecht und die Beispiel oft voller Syntax-Fehler.

                    Kommentar


                    • #11
                      Original geschrieben von Captain Future
                      Wie meinste das denn genau ?
                      achso, preg_replace_callback meine ich natürlich.
                      ansonsten: function top_check($match){...} mal vor $pimpfeld_string = preg_replace_callback($suchmuster20, 'top_check', $pimpfeld_string); schreiben.
                      die reihenfolge sollte eigentlich egal sein, aber du hast ja den fehler, dass die funktion unbekannt ist.

                      und von welchen syntax-fehlern in der doku sprichst du?

                      Kommentar


                      • #12
                        Hi Leute,

                        vielen Dank nochmal an Alle. :-)

                        Wie gesagt unter 5.1.6 und 5.2.0 läuft es, war wohl ein Bug von 5.1.6-5.

                        @3DMax
                        Die sind doch überall.
                        Da brauchst Du dir nur mal 2 oder 3 Funktionen raussuchen und die Beispiele dazu durchgehen die da gepostet sind. Das meiste ist mit Fehlern gesähnt. Naja kann halt nur besser werden.
                        Aber sonst ist php.net ne gute Seite :-)

                        Ciao CF

                        Kommentar

                        Lädt...
                        X