UTF-8-Prüfung der W3C-FAQ mit CAtlRegExp

Pain-maker

Mitglied
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:
#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.
 
Zuletzt bearbeitet:

Pain-maker

Mitglied
Schon mal danke, für die Antwort!

Also das mit den Mengenangaben ist echt doof... hab den regulären Ausdruck mal angepasst:
Code:
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
 

deepthroat

Erfahrenes Mitglied
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ß