tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
622
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Pain-maker Pain-maker ist offline Mitglied Silber
    Registriert seit
    Sep 2005
    Beiträge
    69
    Hi @ all!

    Ich versuche gerade verzweifelt den Regulären Ausdruck von der W3C FAQ in C++ mit CAtlRegExp nachzubauen. Aber ich bekomme immer wieder Assertion Fehler
    Was mache ich falsch?
    Mein Versuch:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    
    #include <iostream>
    #define USE_REGEX
    #include <atlrx.h>
     
    void main()
    {
        CAtlRegExp<>         regExp;
        CAtlREMatchContext<> matches;
        TCHAR                *regExPattern = TEXT("{([\xC2-\xDF][\x80-\xBF]|\xE0[\xA0-\xBF][\x80-\xBF]|[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2,}|\xED[\x80-\x9F][\x80-\xBF]|\xF0[\x90-\xBF][\x80-\xBF]{2,}|[\xF1-\xF3][\x80-\xBF]{3,}|\xF4[\x80-\x8F][\x80-\xBF]{2,})*?}"); // der ASCII-Teil ist nicht notwendig
        
        if(regExp.Parse(regExPattern) == REPARSE_ERROR_OK)
        {
            if(regExp.Match(TEXT("Ich kann es nicht mehr hören!"), &matches))
            {
                printf ("Nicht UTF-8 kodiert!\n");
            }
            else
            {
                printf("UTF-8 kodiert!\n");
            }
        }
        else
        {
            printf("Fehlerhaftes Pattern!\n");
        }
    }

    Bin für jede Hilfe dankbar
    Grüße

    //EDIT:
    Mir ist grad eingefallen, dass die ATL ja gar nich mehr zum Visual Studio gehört... Vielleicht sollte das Thema doch nach C/C++ verschoben werden.
    Geändert von Pain-maker (05.10.09 um 22:37 Uhr)
     

  2. #2
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.169
    Hi.

    Wie lautet denn die Assertionmeldung?

    Atl Regexp unterstützt anscheinend (http://msdn.microsoft.com/en-us/libr...xe(VS.80).aspx) keine Wiederholungen, die geschw. Klammern werden ja auch schon als Gruppierung verwendet...

    Du mußt also x{2,} durch xx* ersetzen.

    Aber warum nimmst du nicht std::tr1::regex ? (http://www.codeproject.com/KB/string/TR1Regex.aspx) (ist beim Visual Studio 2008 ServicePack 1 schon dabei).

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  3. #3
    Pain-maker Pain-maker ist offline Mitglied Silber
    Registriert seit
    Sep 2005
    Beiträge
    69
    Schon mal danke, für die Antwort!

    Also das mit den Mengenangaben ist echt doof... hab den regulären Ausdruck mal angepasst:
    Code :
    1
    
    TCHAR *regExPattern = TEXT("{([\xC2-\xDF][\x80-\xBF]|\xE0[\xA0-\xBF][\x80-\xBF]|[\xE1-\xEC\xEE\xEF][\x80-\xBF][\x80-\xBF]|\xED[\x80-\x9F][\x80-\xBF]|\xF0[\x90-\xBF][\x80-\xBF][\x80-\xBF]|[\xF1-\xF3][\x80-\xBF][\x80-\xBF][\x80-\xBF]|\xF4[\x80-\x8F][\x80-\xBF][\x80-\xBF])*?}");
    Denke, das sollte jetz so richtig sein?!

    Funktionieren, tut's leider trotzdem nicht
    Zwar bekomme ich keine Exceptions mehr, aber der Prüfung klappt jetzt immer, egal ob es sich wirklich um UTF-8 kodierten Text handelt oder nicht. Ich check's nich...

    Bezüglich TR1:
    Das is eine gute Idee, aber das optimalste für mich wäre das ganze mit AtlRegex zu realisieren, da ich dann keine weitere Bibliothek einbinden muss (Habe das VS 2005)

    Schon mal vielen Dank!
    Grüße
     

  4. #4
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.169
    Anscheinend führt die Match Methode von CAtlRegExp eigentlich eine Suche aus und versucht nicht den ganzen String zu erkennen?!

    Du müßtest ja prüfen ob der ganze String UTF-8 kodiert ist und nicht nur ein beliebiges Teilstück. Füge mal ^ und $ am Anfang und Ende hinzu.

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

Ähnliche Themen

  1. Prüfung
    Von Lektor21 im Forum Relationale Datenbanksysteme
    Antworten: 4
    Letzter Beitrag: 22.09.07, 21:15
  2. GB Blacklist Prüfung
    Von Mororu im Forum PHP
    Antworten: 8
    Letzter Beitrag: 03.07.07, 14:20
  3. Email prüfung
    Von Tobey85 im Forum PHP
    Antworten: 10
    Letzter Beitrag: 31.07.06, 14:55
  4. URL-Prüfung
    Von Online-Skater im Forum Javascript & Ajax
    Antworten: 0
    Letzter Beitrag: 25.07.06, 13:30
  5. Reg-Key prüfung
    Von Jukkales im Forum Visual Basic 6.0
    Antworten: 2
    Letzter Beitrag: 06.01.05, 11:36