使用
1 2 3 4 |
// 文件路径的正则 (?r)(?i)[a-z](:\\\\)([\\w]*[\\\\])*([\\w]*).(?<format>mp4|rmvb|wma|asf|avi|3gp|mpg|mkv|mov|mpeg) CString strPattern = L"(?i)[a-z](:\\\\)([^\\\\\\/:\\*\\?<>\\|\\Q\"\\E]+[\\\\])*(?<fn>[^\\\\\\/:\\*\\?<>\\|\\Q\"\\E]+\\.[^\\\\\\/:\\*\\?<>\\|\\s\\Q\"\\E]+)"; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
std::wstring strPattern = L"(?r)(?i)[a-z](:\\\\)([\\w]*[\\\\])*([\\w]*).(?<format>mp4|rmvb|wma|" L"asf|avi|3gp|mpg|mkv|mov|mpeg)"; std::wstring strPszCmd = pszCmd; CRegexpT<wchar_t> regexp(strPattern.c_str()); MatchResult result = regexp.Match(strPszCmd.c_str()); std::wstring temp; if (result.IsMatched()) { int format_start = result.GetStart(); int format_end = result.GetEnd(); int length = format_end - format_start; if (length > 0) { temp = strPszCmd.substr(format_start, length); AddToCheckRcmdQueue(pszPath, temp.c_str()); } } |
CRegexpT
- 正则表达式,'\0'结束的。
- 表达匹配模式。
1 2 3 |
CRegexpT(); CRegexpT(const CHART * pattern, int flag = NO_FLAG); |
CRegexpT::Compile
- 正则表达式,'\0'结束的。
- 表达匹配模式。
1 |
void Compile(const CHART * pattern, int flags = NO_FLAG); |
CRegexpT::MatchExact
- 精确匹配。
- tstring字符串,使用 \0 作为结束标志。
- 返回匹配结果 MatchResult 对象。
- 通过 MatchResult 对象,可以得知是否匹配成功。如果成功,通过 MatchResult 对象可以获取捕获信息。
1 |
MatchResult MatchExact(const CHART * tstring) const; |
CRegexpT::Match
- 查找匹配。
- tstring字符串,使用 \0 作为结束标志。
- 返回匹配结果 MatchResult 对象
- 通过 MatchResult 对象,可以得知是否匹配成功。如果成功,通过 MatchResult 对象可以获取捕获信息。
1 2 3 4 5 |
MatchResult Match(const CHART * tstring) const; MatchResult Match(const CHART * tstring, int start) const; MatchResult Match(CContext * pContext) const; |
CRegexpT::GetNamedGroupNumber
- 返回命名分组的编号。如果返回值小于0,则表示没有该命名分组。
1 |
int GetNamedGroupNumber(const CHART * group_name) const; |
CRegexpT::PrepareMatch
- 匹配准备。
- 经过初始化的查找匹配上下文对象,用来在 Match(CContext * pContext) 中使用。
1 2 3 |
CContext * PrepareMatch(const CHART * tstring) const; CContext * PrepareMatch(const CHART * tstring, int start) const; |
CRegexpT::Replace
- 替换
- 替换后得到的新字符串。
- 这个新字符串是替换过程中分配的字符串,使用完毕后,需要调用 CRegexpT::ReleaseString 进行释放。
1 |
CHART * Replace(const CHART * str, const CHART * rplto, int start = -1, int ntimes = -1) const; |
CRegexpT::ReleaseContext
1 |
static void ReleaseContext(CContext * pContext); |
CRegexpT::ReleaseString
1 |
static void ReleaseString(CHART * tstring); |
MatchResult
MatchResult::IsMatched
- 是否匹配成功。
MatchResult::GetStart
- 匹配成功后,获取所匹配到的子字符串的开始位置。如果匹配失败,则返回负值。
MatchResult::GetEnd
- 匹配成功后,获取所匹配到的子字符串的结束位置。如果匹配失败,则返回负值。
MatchResult::GetGroupStart
- 返回指定分组捕获的字符串的开始位置。如果指定分组未捕获,则返回负值。
MatchResult::GetGroupEnd
- 返回指定分组捕获的字符串的结束位置。如果指定分组未捕获,则返回负值。
MatchResult::MaxGroupNumber
- 返回最大分组编号。
CContext
- CContext 类中存放了匹配过程中的数据。
- 当需要在同一段文本中多次连续匹配时,对同一个 CContext 对象多次匹配,可以节约系统资源。
- 先通过PrepareMatch 方法初始化 CContext 对象,然后使用 Match(CContext * pContext)方法]进行匹配,使用完毕后,使用 ReleaseContext 方法释放 CContext 对象。
本文为原创文章,版权归Aet所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ Boost 程序库完全开发指南:容器算法数学文件08/24
- ♥ Spdlog记述:一07/07
- ♥ C++17_第三篇06/29
- ♥ Spdlog记述:四09/16
- ♥ breakpad记述:Windows07/27
- ♥ Spdlog记述:三07/23