[PHP] preg_match: Wieso keine Rückgabe?

Dieses Thema im Forum "Webentwicklung" wurde erstellt von AceOnFire, 12. Juni 2013 .

Schlagworte:
  1. 12. Juni 2013
    Zuletzt bearbeitet: 12. Juni 2013
    preg_match: Wieso keine Rückgabe?

    Ich habe einen String, den ich auf eine Zahl untersuchen möchte bzw. ich möcht erfahren, wo sich die erste Zahl (Position) befindet.

    Die Strings werden immer unterschiedlich lang sein.

    PHP:
    if(  preg_match ( "/^[0-9]*$/" , "sdfsfs65" ) );
        echo 
    "es klappt" ;
    Zeigt mir es klappt an.

    Wenn ich jetzt folgendes versuche, dann bleibt die Ausgabe von print_r leer.
    PHP:
    preg_match ( "/^[0-9]*$/" , "sdfsfs65" , $array );
    print_r ( $array );
    Habe ich etwas falsch gemacht oder ist mit matches was anderes gemeint?
    PHP: preg_match - Manual

    Hoffe es kann mir da einer helfen..

    EDIT: Leider ist die erste Zahl im String auch immer einer andere bzw. selten dieselbe, weshalb ich auch nicht strpos benutzen kann.
     
  2. 12. Juni 2013
    Zuletzt bearbeitet: 12. Juni 2013
    AW: preg_match: Wieso keine Rückgabe?

    Kenn mich mit RegEx nicht aus, aber dein Ausdruck im preg_match scheint nur zu prüfen ob der String ausschließlich aus Zahlen besteht.
    Was ich dir aber aufjedenfall sagen kann ist warum du beim Array keine Ausgabe bekommst. Du musst natürlich jedes Element des Arrays einzeln prüfen & das tust du mit einer foreach Schleife.

    PHP:
    <? php

    $array 
    = array( 'shajdh7' , 'ahsdj' , '232ss' , '23' '12312312' );

    $i  0 ;
    foreach(
    $array  as  $string )
    {
        
    $i ++;
        if(
    preg_match ( '~^.*\d+.*$~' $string ))
            echo 
    'Element ' $i ' - Zahlen enthalten<br />'
        else {
            echo 
    'Element ' $i ' - keine Zahlen enthalten<br />' ;
        }

    }
    ?>
    EDIT: Habs nochmal überarbeitet & deinen Ausdruck ebenfalls korrigiert. Jetzt wird überprüft ob eine Zahl im String enthalten ist.
     
    1 Person gefällt das.
  3. 12. Juni 2013
    Zuletzt bearbeitet: 12. Juni 2013
    AW: preg_match: Wieso keine Rückgabe?

    Der dritte Parameter in preg_match/preg_match_all wird nur befüllt wenn du in deinem Regulären Audruck Bereiche einklammerst.

    /foo/ -> $array bleibt leer.
    /(foo)/ -> $array beinhaltet "foo" wenn es gefunden wurde.

    Der Fehler in einem ersten Versuch ist auch recht simpel:
    PHP:
    if(  preg_match ( "/^[0-9]*$/" , "sdfsfs65" ) );
    Man beachte das ";" am ende von if()
    Ein einzelnes ";" ist bereits ein gültiger Ausdruck (EmptyExpression) und daher ist die if-Anweisung nach dem ";" beendet.


    Dein Code sieht für den PHP-Compiler quasi so aus:
    PHP:
    if(  preg_match ( "/^[0-9]*$/" , "sdfsfs65" ) ) {

    }
    echo 
    "es klappt" ;
    Für weitere Informationen bezüglich Regulären Ausdrücken empfehle ich den Wikipedia Artikel und die PHP Dokumentation.
    Für tiefgreifende Informationen kannst du dir die PCRE Dokumentation auf der offiziellen Seite durchlesen.
     
    1 Person gefällt das.
  4. 12. Juni 2013
    AW: preg_match: Wieso keine Rückgabe?

    Wieso durchläufst du den String nicht mit einer For-Schleife?
    Code:
    $str = "test123test";
    for($i=0; $i<strlen($str); $i++)
    {
     if(preg_match("/[0-9]/", $str[$i]))
     {
     echo "Die 1. Zahl befindet sich an der Position ".$i+1." und lautet ".$str[$i];
     }
    }
    
    Nun weis ich nicht ob du in meinem Beispiel nur die Zahl "1" suchst oder die komplette "123".
    Dann kannst du aber einfach die Schleife anpassen.
     
    1 Person gefällt das.
  5. 12. Juni 2013
    Zuletzt bearbeitet: 12. Juni 2013
    AW: preg_match: Wieso keine Rückgabe?

    PHP:
    if ( preg_match ( '/([0-9]+)/' 'foo123bar' $m PREG_OFFSET_CAPTURE ))
      print 
    "zahl =  { $m [ 1 ][ 0 ]} , position =  { $m [ 1 ][ 1 ]} " ;
    Ausgabe:
    Code:
    zahl = 123, position = 3
     
  6. 12. Juni 2013
    AW: preg_match: Wieso keine Rückgabe?

    PREG_OFFSET_CAPTURE

    PHP:
    if(  preg_match ( "/([0-9])+/" , 'sdfsfs65' $match PREG_OFFSET_CAPTURE ) ) {
        echo 
    '<pre>' htmlspecialchars print_r $match true  ) ),  '</pre>' ;
    }
     
    1 Person gefällt das.
  7. 12. Juni 2013
    AW: preg_match: Wieso keine Rückgabe?

    Danke euch allen.
    Ihr habt mir sehr geholfen.

    Das mit dem Semikolon war ein Versehen, welches mir normalerweise nicht passiert und ich achte dort schon darauf.
    Soweit ich es in Erinnerung habe und es nicht mit einer anderen Sprache verwechsele, kann man, wenn bezogen aufs If nur ein Befehl/Zeile ausgeführt werden soll, es auch ohne { } schreiben.
    Ich weiß nicht wie es dorthin gelangt ist, wobei es auch so bei mir im Code so war.

    Dennoch danke für den Hinweis.
     
  8. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.