Mailinglisten-Archive |
Roland Braband wrote: >>oder du splittest es einfach an den Kommastellen und übprüfst dann jedes >>einzelne: >>für jede zeile >>{ >> split bei komma >> überpfüfen jedes feldes (is_string, is_int, ...) >>} > > > Das ist der richtige Ansatz und auch die Richtung die ich weiter verfolge. > Aber ein einfaches aufsplitten mit split() führt nicht zum Ergebnis, da: > > INT, INT, STRING, INT, STRING > 1 , 2 , 'test' , 3 ,'$richtig->essen(\'fettarmes\', > \'essen\', true)' => true > > einen String enthält der selbst Kommata beinhaltet! > Also muss ich über preg_split() einen Term finden > der das nach folgenden Regeln splittet: > > (NACH ,) ODER (, UND vorheriges (' OHNE vorheriges\)) > > sebst dann ist nicht sicher ob nicht: > > 1 , 2 , 'test' , 3 ,'$richtig->essen(\'fettarmes\', > \'essen', true)' => true > slash bevor singel Quote > fehlt ---^ > eine exeption schmeisst was nicht sein soll ich will ja genau diesen Fall > filtern > und 'reparieren'! > Also sollte die Regel heissen: > > (NACH ' OHNE vorherigen \) UND , > > was aber nicht den ersten Abschnitt matcht :( > > Anderer Lösungsweg: > ein: $regs = "/'([^'].*)'/sim"; > preg_match_all($regs, $string, $match); > gibt mir den gesuchten String als Kommataseparierte Liste zurück, > ein: $regs = "/'([^'].*?)'/sim"; > splittet sogar diese liste nach Kommata, erfüllt aber nicht die Bedingung > das Php-Code > erhalten bleiben soll! Ich drehe mich also im Kreis... // flags $string_open = true; $value_type = 'undefined'; $escaped = false; $numbers = array(0,1,2,3,4,5,6,7,8,9); for ( $i = 0; $i <= strlen($values); $i++ ) { switch ( $value_type ) { case 'int': if ( in_array($values[$i], $numbers) ) { $value_type = 'int'; } elseif ( $values[$i] == ',' && $values[$i] != ' ' ) { $value_type = 'undefined'; } elseif ( $values[$i] != ' ' ) { // ERROR! } break; case 'string': if ( $values[$i] == "'" && $string_open == true && $escaped == false) { $string_open = false; } elseif ( $values[$i] == '\\' ) { if ( $escaped == true ) $escaped = false; else $escaped = true; } elseif ( $string_open == false && $values[$i] == ',' ) { $value_type = 'undefined'; } break; case 'undefined': default: if ( in_array($values[$i], $numbers) ) { $value_type = 'int'; } elseif ( $values[$i] == "'" ) { $value_type = 'string'; $string_open = true; } } } if ( $string_open == true ) { // ERROR! } ich hab das jetzt nicht getestet, sondern bloß mal so ausm kopf hier hin geschrieben, so als denk-anstoß! -- Sebastian Mendel (www.sebastianmendel.de) *www.warzonez.de* | www.tekkno4u.de | www.nofetish.com
php::bar PHP Wiki - Listenarchive