-
Notifications
You must be signed in to change notification settings - Fork 2
/
match.cpp
36 lines (33 loc) · 1.11 KB
/
match.cpp
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
27
28
29
30
31
32
33
34
35
36
#include <tchar.h>
#include <string>
#include <regex>
typedef std::basic_string<TCHAR> tstring;
typedef std::basic_regex<TCHAR> tregex;
typedef std::match_results<tstring::const_iterator> tmatch;
// Content-Type メタタグをマッチングする正規表現。大文字小文字は無視
static tregex regctype(_T("<meta[ \\t]+http-equiv=(\\\"content-type\\\"|'content-type'|content-type)[ \\t]+content=(\\\"[^\\\"]*\\\"|'[^']*'|[^ \\t>]+).*>"), tregex::icase);
/**
* text 中から Content-Type のメタタグを探して、指定されてる値 (content=) を返す。
* @param text 探査対象
* @param ctype 結果格納先
*/
bool
matchContentType(tstring &text, tstring &ctype)
{
tmatch result;
if (std::regex_search(text, result, regctype)) {
tstring str = result.str(2);
int len = str.size();
const TCHAR *buf = str.c_str();
if (len > 0) {
if (buf[0] == '\'' || buf[0] == '"') {
// クオートされてる場合はそれを取り除く
ctype = tstring(buf+1, len-2);
} else {
ctype = tstring(buf, len);
}
return true;
}
}
return false;
}