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フォーマットを判断します.コードは次のとおりです.
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;
}