#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. + Multi-Zitat Zitieren
#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. + Multi-Zitat Zitieren
#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. + Multi-Zitat Zitieren
#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. + Multi-Zitat Zitieren
#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 + Multi-Zitat Zitieren
#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. + Multi-Zitat Zitieren
#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. + Multi-Zitat Zitieren