Boost Regex



  • Hallo, ich hätte da eine ziemlich blöde 🤡 Frage:
    Wie kann ich mit Regex aus der Boost library überprüfen, ob ein String Zahlen und Groß und Kleinschreibung enthält?
    Z.B. "dqvDs9", oder "2ffsXC5".

    Ich will halt nur wissen, ob der String Zahlen und zugleich Groß und Kleinschreibung enthält.

    Danke schonmal im voraus.

    EDIT: Aaah jetzt habe ich aus Versehen im falschen Forum gepostet. Könnte das bitte mal ein Mod verschieben? Danke. 👍



  • Versuch mal

    ^[0-9a-zA-Z]+$
    

    Es gibt aber auch Kürzel. http://www.regenechsen.de/phpwcms/index.php?regex_dt_elemente



  • Danke schonmal, für deine Antwort.
    Das Problem ist nur, dass regex_match nur true zurückliefern soll, wenn in dem String Zahlen und Groß und Kleinbuchstaben vorkommen.
    Also z.B. "df9Hr" und nicht "df9hr".



  • Auf die schnelle fällt mir da nur ein, zuerst ein Regex wie Knuddlbaer vorgeschlagen hat zu machen und anschließend ein

    string->IndexOf('A') != -1
    

    bis

    string->IndexOf('Z') != -1
    

    in einer Schleife. Beim ersten Fund kann die Schleife abgebrochen werden. Anschließend noch die Zahlen prüfen.

    Übrigens:

    ^[0-9a-zA-Z]$
    

    entspricht

    ^[\w]$
    


  • 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.


Anmelden zum Antworten