B
sucitrams schrieb:
nur true zurückliefern soll, wenn in dem String Zahlen und Groß und Kleinbuchstaben vorkommen.
Also z.B. "df9Hr" und nicht "df9hr".
Wenn ich das richtig verstehe (hab grad meine Probleme mit dem Text), soll true zurückgegeben werden, wenn sowohl Ziffern als auch Groß- und Kleinbuchstaben enthalten sind?
Prüfen kannst du das auf jeden Fall mit Ausschluss, also String enthält nicht nur Kleinbuchstaben und nicht nur Großbuchstaben und nicht nur Ziffern und nicht nur irgendwelche Kombinationen (bis auf die 3er-Kombi) davon.
edit: Um's mal in boost::spirit (als Alternative) zu formulieren:
bool whatever( const char* text )
{
using namespace boost::spirit;
// Regeln für Klein- und Großbuchstaben. Regel für Ziffern gibt's schon (digit_p).
rule<> small_p = range<>( 'a', 'z' );
rule<> big_p = range<>( 'A', 'Z' );
// Diesen Regeln darf unser Text nicht entsprechen...
rule<> fails[] = { +small_p, +big_p, +digit_p, +(small_p|digit_p), +(small_p|big_p), +(big_p|digit_p) };
BOOST_FOREACH( const rule<>& r, fails )
if ( parse( text, r, space_p ).full )
return false;
// ...dafür sollte er der Kombination der Regeln bestehen.
return parse( text, +(small_p|big_p|digit_p), space_p).full;
}
edit2: Übrigens sind weder boost::regex noch boost::spirit für so eine Aufgabe geschaffen. Die prüfen eigentlich eher, ob ein String einem gewissen Muster im Sinne von "was darf drin sein" und nicht "was muss drin sein" entspricht.