ERLEDIGT
NEIN
NEIN
ANTWORTEN
3
3
ZUGRIFFE
622
622
EMPFEHLEN
-
05.10.09 22:25 #1
- 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)
-
05.10.09 23:43 #2
- 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.
-
06.10.09 17:29 #3
- 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:
Denke, das sollte jetz so richtig sein?!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])*?}");
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
-
07.10.09 10:13 #4
- 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
-
Prüfung
Von Lektor21 im Forum Relationale DatenbanksystemeAntworten: 4Letzter Beitrag: 22.09.07, 21:15 -
GB Blacklist Prüfung
Von Mororu im Forum PHPAntworten: 8Letzter Beitrag: 03.07.07, 14:20 -
Email prüfung
Von Tobey85 im Forum PHPAntworten: 10Letzter Beitrag: 31.07.06, 14:55 -
URL-Prüfung
Von Online-Skater im Forum Javascript & AjaxAntworten: 0Letzter Beitrag: 25.07.06, 13:30 -
Reg-Key prüfung
Von Jukkales im Forum Visual Basic 6.0Antworten: 2Letzter Beitrag: 06.01.05, 11:36





Zitieren
Login






