#1 6. September 2012 Zuletzt bearbeitet: 6. September 2012 REGEX Url Hi, folgendes ist mein Problem. Ich habe eine Liste (Upload einer txt Datei): Code: ##blabla FileZilla xxx1.de username3 passwort3 127.0.9.8 - PCPC-PC^Niemand FileZilla xxx2.de username1 passwort1 127.0.9.8 - XYZ-PC^Jemand FileZilla 127.0.0.1 username2 passwort2 127.0.9.8 - XYZ-PC^Jemand2 ftp://username:passwort@update.test1.de:21 ftp://p7747915:gbtf1sts@test2.de ftp://technik:technik@random-url.com ftp://196894-ftp:11111@ftp.test.com.de ftp://tcs:lolol@@@lolol@update.test.de ftps://test:test@113.133.133.2:1337 ftp://test2:test@113.133.133.2:1335 ftps://test1:test@113.133.113.2:21 Ich möchte nun mit preg_match folgendes herausfiltern: ftp, ftps, filezilla Logins. Ich möchte sie letztendlich so verwerten: $ftp->host, $ftp->username, $ftp->passwort, $ftp->port, $ftp->ssl_mode Habe es mit folgendem REGEX schon versucht, den ich im Netz gefunden habe: Code: ^(ftps?):\/\/((?:[a-z0-9@:.-]|%[0-9A-F]{2}){3,})(?::(\d+))?((?:\/(?:[a-z0-9-._~!$&'()*+,;=:@]|%[0-9A-F]{2})*)*)(?:\?((?:[a-z0-9-._~!$&'()*+,;=:\/?@]|%[0-9A-F]{2})*))?(?:#((?:[a-z0-9-._~!$&'()*+,;=:\/?@]|%[0-9A-F]{2})*))? Habt ihr eine Idee, wie ich mir am schlausten die gewünschten Daten ziehen kann? Ich muss die FTP Links quasi alle aus der Importierten Datei in die DB schreiben. Gruß bad PS: Der Code bisher PHP: $lines = file ( $file [ 'file' ][ 'tmp_name' ]); // read file line by line foreach( $lines as $link ) { // do filter work $pattern = '@^(?:(ftps|ftp)://)?([^/]+)@i' ; if( preg_match ( $pattern , trim ( $link ), $matches )) { die( Debug :: dump ( $matches )); } // DB work $ftp = ORM :: factory ( 'ftp' ); $ftp -> host = Arr :: get ( $filter , 'host' ); $ftp -> port = Arr :: get ( $filter , 'port' ); $ftp -> username = Arr :: get ( $filter , 'username' ); $ftp -> password = Arr :: get ( $filter , 'password' ); $ftp -> ssl = Arr :: get ( $filter , 'ssl' ); $ftp -> code_id = Arr :: get ( $post , 'code_id' ); // save $ftp -> save (); + Multi-Zitat Zitieren
#2 6. September 2012 Zuletzt bearbeitet: 6. September 2012 AW: REGEX Url PHP: parse_url - Manual FileZilla: Code: /^[^\s]+\s+(?P<host>[^\s]+)\s+(?P<user>[^\s]+)\s+(?P<pass>[^\s]+)/ Beispiel: PHP: <? php $re = '/^[^\s]+\s+(?P<host>[^\s]+)\s+(?P<user>[^\s]+)\s+(?P<pass>[^\s]+)/' ; $fz = 'FileZilla xxx1.de username3 passwort3 127.0.9.8 - PCPC-PC^Niemand' ; preg_match ( $re , $fz , $rs ); print_r ( $rs ); Code: Array ( [0] => FileZilla xxx1.de username3 passwort3 [host] => xxx1.de [1] => xxx1.de [user] => username3 [2] => username3 [pass] => passwort3 [3] => passwort3 ) 1 Person gefällt das. + Multi-Zitat Zitieren
#3 6. September 2012 Zuletzt bearbeitet: 6. September 2012 AW: REGEX Url du bist der beste. ich komm mit regex immer noch null klar. ^^ EDIT: Wenn ich das so mache: PHP: // get file content $lines = file ( $file [ 'file' ][ 'tmp_name' ]); // read file line by line foreach( $lines as $link ) { // filter filezilla $pattern_filezilla = '/^[^\s]+\s+(?P<host>[^\s]+)\s+(?P<user>[^\s]+)\s+(?P<pass>[^\s]+)/' ; // filter ftp url $url_array = parse_url ( trim ( $link )); if(!isset( $url_array [ 'scheme' ]) || strlen ( $link ) < 5 ) { continue; } if( $url_array [ 'scheme' ] == 'ftp' || $url_array [ 'scheme' ] == 'ftps' || preg_match ( $pattern_filezilla , trim ( $link ), $url_array )) { // DB work $ftp = ORM :: factory ( 'ftp' ); $ftp -> host = Arr :: get ( $url_array , 'host' ); $ftp -> port = Arr :: get ( $url_array , 'port' ); $ftp -> username = Arr :: get ( $url_array , 'user' ); $ftp -> password = Arr :: get ( $url_array , 'pass' ); $ftp -> code_id = Arr :: get ( $post , 'code_id' ); $ftp -> activemode = '0' ; if( $url_array [ 'scheme' ] == 'ftps' ) { $ftp -> ssl = '1' ; } } try { $ftp -> save (); $view -> success [] = Arr :: get ( $url_array , 'host' ) . ' added to DB' ; } catch( ORM_Validation_Exception $e ) { $view -> errors = $e -> errors (); } } // delete file unlink ( $file [ 'file' ][ 'tmp_name' ]); Dann bekomme ich nur 2 Einträge aus obigen Beispielen in die DB: ftps://test:test@113.133.133.2:1337 ftps://test1:test@113.133.113.2:21 + Multi-Zitat Zitieren
#4 6. September 2012 AW: REGEX Url PHP: <? php // filter filezilla const RE_FILEZILLA = '/^[^\s]+\s+(?P<host>[^\s]+)\s+(?P<user>[^\s]+)\s+(?P<pass>[^\s]+)/' ; // get file content $lines = file ( $file [ 'file' ][ 'tmp_name' ]); // read file line by line foreach ( $links as $link ) { if ( strlen ( $link = trim ( $link )) < 5 ) continue; $url_array = [ 'scheme' => 'ftp' , 'port' => 25 ]; if ( preg_match ( '/^ftps?:/i' , $link )) // ftp url $url_array = parse_url ( $link ); else // filezilla entry preg_match ( RE_FILEZILLA , $link , $url_array ); // parse_url or regex failed if (! $url_array || !isset( $url_array [ 'host' ])) continue; // DB work $ftp = ORM :: factory ( 'ftp' ); $ftp -> host = Arr :: get ( $url_array , 'host' ); $ftp -> port = Arr :: get ( $url_array , 'port' ); $ftp -> username = Arr :: get ( $url_array , 'user' ); $ftp -> password = Arr :: get ( $url_array , 'pass' ); $ftp -> code_id = Arr :: get ( $post , 'code_id' ); $ftp -> activemode = '0' ; if ( strcasecmp ( $url_array [ 'scheme' ], 'ftps' ) === 0 ) $ftp -> ssl = '1' ; try { $ftp -> save (); $view -> success [] = Arr :: get ( $url_array , 'host' ) . ' added to DB' ; } catch( ORM_Validation_Exception $e ) { $view -> errors = $e -> errors (); }} // delete file unlink ( $file [ 'file' ][ 'tmp_name' ]); so vielleicht? kann leider nicht hellsehen. + Multi-Zitat Zitieren