Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用std::regex_搜索与模式匹配的所有文件和文件夹_C++_Regex - Fatal编程技术网

C++ 使用std::regex_搜索与模式匹配的所有文件和文件夹

C++ 使用std::regex_搜索与模式匹配的所有文件和文件夹,c++,regex,C++,Regex,我想要实现搜索窗口,我使用: int main() { Search(L"C:\\Users", L"*.txt"); // or Search(L"C:\\Users", L"*.txt"); } search(path, CString searchString) { std::wregex searchPattern = GetPattern(searchString); result = RecursiveSearch(path, searchPattern); return

我想要实现搜索窗口,我使用:

int main()
{
 Search(L"C:\\Users", L"*.txt"); // or Search(L"C:\\Users", L"*.txt");
}

search(path, CString searchString)
{
 std::wregex searchPattern = GetPattern(searchString);
 result = RecursiveSearch(path, searchPattern);
 return result ;
}

RecursiveSearch(path, std::wregex searchPattern)
{
CString newPath = path + CString("\\*");
WIN32_FIND_DATA findData;
HANDLE fileHandle = INVALID_HANDLE_VALUE;
fileHandle = FindFirstFile(newPath, &findData);
do
{
    if (INVALID_HANDLE_VALUE != fileHandle)
    {
        if (std::regex_search(findData.cFileName, searchPattern))
        {
            if (findData.cFileName != std::wstring(TEXT(".")) && findData.cFileName != std::wstring(TEXT("..")))
            {
                std::wcout << (const wchar_t*)findData.cFileName
            }
        }
        if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
        {
            if (findData.cFileName != std::wstring(TEXT(".")) && findData.cFileName != std::wstring(TEXT("..")))
            {
        RecursiveSearch(GenerateNewPath(path, ToCString(findData.cFileName)), searchPattern);
            }
        }

    }
    else
    {
        continue;
    }
} while (FindNextFile(fileHandle, &findData));
return allObject;
 }
intmain()
{
搜索(L“C:\\Users”,L“*.txt”);//或搜索(L“C:\\Users,L“*.txt”);
}
搜索(路径,CString searchString)
{
std::wregex searchPattern=GetPattern(searchString);
结果=递归搜索(路径、搜索模式);
返回结果;
}
递归搜索(路径,std::wregex searchPattern)
{
CString newPath=path+CString(\\*);
WIN32_FIND_DATA findData;
句柄文件句柄=无效的句柄值;
fileHandle=FindFirstFile(newPath和findData);
做
{
if(无效的\u句柄\u值!=文件句柄)
{
if(std::regex_search(findData.cFileName,searchPattern))
{
if(findData.cFileName!=std::wstring(TEXT(“.”)和&findData.cFileName!=std::wstring(TEXT(“…”))
{

模式添加标志的标准::wcout:

std::regex_constants::icase | std::regex_constants::ECMAScript | std::regex_constants::optimize;
并向regex_搜索函数添加标志:

std::regex_constants::match_continuous

将$添加到模式的结尾

尝试添加$(字符串的结尾)将regexTry的结尾添加为匹配模式。
如果希望它与点而不是任何字符完全匹配,则需要转义。
L“*.txt”
被接受为有效模式?在这种情况下,
*
量词实际上量化了什么?那么程序中最有趣的部分是
GetPattern
的实现。奇怪的是,这正是您忽略显示的部分。文件名表达式不是正则表达式。嗯,从某种意义上讲,不是通常的正则表达式语法告诉你它们是如何工作的。它们有自己的规则集,正则表达式包不应用这些规则。“*.txt”作为文件名表达式是有效的,但它不是有效的正则表达式。