C++正規表現を用いてGUIDフォーマットを判断

2166 ワード

まず,GUIDの概念と正規表現について理解する.
 
GUID、グローバル統合識別子.Windowsプラットフォームでは、GUIDの応用は非常に広範である:レジストリ、クラスおよびインタフェースの識別、データベース、さらには自動的に生成されたマシン名、ディレクトリ名など.共通のGUIDの構成は以下の通りです
typedef struct _GUID {
DWORD Data1;
 WORDData2;
 WORDData3;
 BYTEData4[8];
 }GUID;
例を挙げます.
GUIDのフォーマットがC 0495 A 75-1 EEA-45 ad-84 AE-4899900 BD 6 A 8であるとする
ここで、Data 1は32ビットであり、上のC 0495 A 75に対応する8個の4ビット16進数とみなすことができる
ここで、Data 2は16ビットであり、4つの4ビット16進数と見なすことができ、上の1 EEAに対応する
このうちData 3は16ビットであり、4つの4ビット16進数と見なすことができ、上の45 adに対応する
このうちData 4は特殊で、8バイトで16個の4桁16進数とみなすことができます
そのData 4[0]、Data 4[1]を取って4つの4桁の16進数を構成し、上の84 AEに対応する
そのData 4[2]、Data 4[3]を取って4つの4桁の16進数を構成し、上の4895に対応する
そのData 4[4]、Data 4[5]を取って4つの4桁の16進数を構成し、上の900 Bに対応する
そのData 4[6]、Data 4[7]をとって4つの4桁の16進数を構成し、上のD 6 A 8に対応する
*注意:4桁の16進数は1つのGUID文字に対応します.
Windowsの下にGUIDを生成する関数があります.使用するヘッダファイル「objbase.h」、リンクするライブラリole 32が必要です.lib.
HRESULTCoCreateGuid(GUID * pguid);
 
正規表現、規則式とも呼ばれる.(英語:RegularExpression、コードではregex、regexpまたはREと略記されることが多い)、コンピュータ科学の概念です.正規表現は通常、あるパターン(ルール)に合致するテキストを取得、置換するために使用されます.
 
C++regex関数は3つあります:regex_match、 regex_search 、regex_replace.この文書ではregex_を使用します.match関数でGUIDフォーマットを判断します.コードは次のとおりです.
#include   
#include   
#include 

using namespace std;

inline bool IsGuidValid(const std::string& szText)
{
	std::string regString("^[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$"); 
	//       -        
	std::tr1::regex_constants::syntax_option_type fl = std::tr1::regex_constants::icase;  
	//              
	std::tr1::regex regExpress(regString, fl);  
	//          
	std::tr1::smatch ms;  
	//           

#if defined(UNICODE)
	return std::tr1::regex_match(szText,regExpress);
#else 
	USES_CONVERSION;
	return std::tr1::regex_match(A2W(szText.c_str()), regExpress);
#endif
}

int _tmain(int argc, _TCHAR* argv[])
{
	if (IsGuidValid("C0495A75-1EEA-45ad-84AE-4895900BD6A8"))
	{
		std::cout << "match !!!!!!!!!!!";
	}
	else
	{
		std::cout << "no match !!!!!!!!!";
	}
		 
	getchar();
	return 0;
}