Anzahl von Zahlen im String

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

  • Anzahl von Zahlen im String

    Hallo,

    Ich hoffe Ihr könnt mit helfen, da ich mit Google und co. nicht weiterkomme.

    Folgendes Problem:

    String mit folgendem Inhalt:

    "100mg-250mg-1Flasche und 1/2 Flasche".

    jetzt möchte ich die Anzahl der Zahlen in dem String ermitteln

    -> Ergebnis sollte 4 sein

    Ich habe schon mal mit ereg_replace experimentiert , komme aber nicht weiter.
    PHP-Code:
    <?php
    $Text
    ="100mg-250mg-1Flasche und 1/2 Flasche";
    $Dosis ereg_replace("[a-zA-Z!§$%&()=?'*-]"" ",$Text );
    echo 
    $Dosis;
    ?>
    hat jemand eine Idee ?

  • #2
    PHP-Code:
    $pattern '~\\d{1,}/\\d{1,}|\\d{1,}~is'
    und die Treffer im Array, das preg_match_all zurückgibt zählen
    http://regexp-evaluator.de/evaluator...e247/#ergebnis
    Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

    [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
    Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

    Kommentar


    • #3
      Super , danke jahlives,

      wenn aber jemand eine 0 eingibt , sollte die nicht mit gezählt werden ,
      wie muss ich dann $pattern abändern ?

      Kommentar


      • #4
        wenn aber jemand eine 0 eingibt , sollte die nicht mit gezählt werden ,
        wie muss ich dann $pattern abändern ?
        Würde das jetzt nicht über den RexExp probieren, sondern mittels PHP machen. Dann wirst du dich nicht so sehr verrenken müssen
        PHP-Code:
        preg_match_all('~\\d{1,}/\\d{1,}|\\d{1,}~is',$string,$treffer);
        for(
        $i=0;$i<count($treffer[0]);$i++){
          if(
        $treffer[0][$i] == 0){
            unset(
        $treffer[0][$i]);
          }
        }
        echo 
        'Es wurden '.count($treffer[0]).' Zahlen gefunden, die nicht 0 sind'
        Gruss

        tobi
        Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

        [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
        Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

        Kommentar


        • #5
          Perfekt ,

          danke tobi , du hast mir sehr weiter geholfen ;-)


          Gruss
          Alex

          Kommentar


          • #6
            Hm, hab doch noch ein kleines Problem,
            PHP-Code:
            <?php

              $string 
            '1-0-0';

            preg_match_all('~\d{1,}/\d{1,}|\d{1,}~is',$string,$treffer);
            for(
            $i=0;$i<count($treffer[0]);$i++){
              if(
            $treffer[0][$i] ==0){
                unset(
            $treffer[0][$i]);
              }
            }
            echo 
            'Es wurden '.count($treffer[0]).' Zahlen gefunden, die nicht 0 sind';
            echo 
            '<pre>'.print_r($trefferTRUE).'</pre>';
            ?>
            gibt als Ergebnis:

            Es wurden 2 Zahlen gefunden, die nicht 0 sind

            Array
            (
            [0] => Array
            (
            [0] => 1
            [2] => 0
            )

            )

            Was muß ich noch ändern ?


            Gruss

            Alex

            Kommentar


            • #7
              PHP-Code:
              for($i=0,$n=count($treffer[0]);$i<$n;$i++){ 
              Die Anzahl Elemente im Array ändert sich, darum musst du dir die Elementanzahl zu Beginn merken!

              Kommentar


              • #8
                Oh Oh ,

                ich muß noch sehr sehr viel lernen.


                Vielen Dank !!!



                Gruss

                Alex

                Kommentar


                • #9
                  PHP-Code:
                  for($i=0,$n=count($treffer[0]);$i<$n;$i++){ 
                  Gar nicht mehr daran gedacht, dass eine for-Schleife direkt auf den Zustand der Arrays zugreifen kann. Hatte da irgendwie das Verhalten von foreach im Kopf **KopfAnDieWandRamm**
                  @topicstarter
                  Eine foreach Schleife kriegt Anfangs eine Kopie des Arrays übergeben und bekommt nix von der Löschung einzelner Elemente mit
                  PHP-Code:
                  foreach($treffer[0] as $key=>$wert){
                    if(
                  $wert == 0){
                      unset(
                  $treffer[0][$key]);
                    }

                  Oder den count($array) ausserhalb der Schleifendefinition festlegen, dann ist dieser Wert statisch und das vorherige Problem sollte ebenfalls behoben sein
                  PHP-Code:
                  $ende count($treffer[0]);
                  for(
                  $i=0;$i<$ende;$i++){
                    [...]

                  Gruss

                  tobi
                  Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                  [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                  Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                  Kommentar


                  • #10
                    Das Ganze geht aber auch direkt über preg_match_all():
                    PHP-Code:
                    $pattern '/\\d+/\\d+|[1-9]+\\d*/s';
                    preg_match_all($pattern$text$ret);

                    echo 
                    "Anzahl: " count($ret[0]) . "<br />"
                    Gruss
                    H2O

                    Kommentar


                    • #11
                      PHP-Code:

                      $text 
                      '0abc123def456';
                      $hits 0;
                      $size strlen($text);

                      for (
                      $i 0$i $size$i++)
                      {
                          if (
                      ctype_digit($text{$i}) && (!= $text{$i}))
                          {
                              
                      $hits++;
                          }

                      Sollte um einiges schneller sein, als eine Regex.
                      Zuletzt geändert von Griecherus; 07.03.2008, 11:54.
                      Nieder mit der Camel Case-Konvention

                      Kommentar


                      • #12
                        @Grieche
                        Hast du dir mal den ersten String angeschaut, den der TS gepostet hat? Da würde deine Suche aber arg straucheln
                        PHP-Code:
                        $Text="100mg-250mg-1Flasche und 1/2 Flasche"
                        Gruss

                        tobi
                        Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                        [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                        Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                        Kommentar


                        • #13
                          Original geschrieben von jahlives
                          @Grieche
                          Hast du dir mal den ersten String angeschaut, den der TS gepostet hat? Da würde deine Suche aber arg straucheln
                          PHP-Code:
                          $Text="100mg-250mg-1Flasche und 1/2 Flasche"
                          Gruss

                          tobi
                          Hoppla, da war ich wohl zu voreilig
                          ( Bin wohl noch zu müde... )
                          Nieder mit der Camel Case-Konvention

                          Kommentar

                          Lädt...
                          X