注册 登录
编程论坛 C语言论坛

求助:俩个问题,正则问题 和 vector容器问题

追梦人zmrghy 发布于 2022-12-14 13:39, 842 次点击
程序代码:
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
    {
        Regex^ re1 = gcnew Regex(".?:?[\\\\]?(.*)");
        std::vector<std::string> StrArr = { "E:\\编程教程\\VC++ 视频教程", ":\\编程教程\\VC++ 视频教程", "\\编程教程\\VC++ 视频教程", "编程教程\\VC++ 视频教程", "D:\\123\\abc\\ABC", ":\\123\\abc\\ABC", "\\123\\abc\\ABC", "123\\abc\\ABC" };
        //std::vector<String^> StrArr = { "E:\\编程教程\\VC++ 视频教程", ":\\编程教程\\VC++ 视频教程", "\\编程教程\\VC++ 视频教程", "编程教程\\VC++ 视频教程", "D:\\123\\abc\\ABC", ":\\123\\abc\\ABC", "\\123\\abc\\ABC", "123\\abc\\ABC" };
        for (auto i : StrArr)
        {
            textBox1->Text += gcnew String(i.c_str()) + "  ->  " + gcnew String(re1->Replace(gcnew String(i.c_str()), "$1")) + "\r\n";
            //textBox1->Text += i + "  ->  " + re1->Replace(i, "$1") + "\r\n";
        }
        textBox1->Text += textBox2->Text +"  ->  "+ re1->Replace(textBox2->Text, "$1") + "\r\n";
    }

只有本站会员才能查看附件,请 登录


正则问题
第4行少了一个字,第8行少了一个字。  如何写才能让字符串开头 没有盘符,冒号 反斜杠,又不少其它字符。





程序代码:
    private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
    {
        Regex^ re1 = gcnew Regex(".?:?[\\\\]?(.*)");
        //std::vector<std::string> StrArr = { "E:\\编程教程\\VC++ 视频教程", ":\\编程教程\\VC++ 视频教程", "\\编程教程\\VC++ 视频教程", "编程教程\\VC++ 视频教程", "D:\\123\\abc\\ABC", ":\\123\\abc\\ABC", "\\123\\abc\\ABC", "123\\abc\\ABC" };
        std::vector<String^> StrArr = { "E:\\编程教程\\VC++ 视频教程", ":\\编程教程\\VC++ 视频教程", "\\编程教程\\VC++ 视频教程", "编程教程\\VC++ 视频教程", "D:\\123\\abc\\ABC", ":\\123\\abc\\ABC", "\\123\\abc\\ABC", "123\\abc\\ABC" };
        for (auto i : StrArr)
        {
            //textBox1->Text += gcnew String(i.c_str()) + "  ->  " + gcnew String(re1->Replace(gcnew String(i.c_str()), "$1")) + "\r\n";
            textBox1->Text += i + "  ->  " + re1->Replace(i, "$1") + "\r\n";
        }
        textBox1->Text += textBox2->Text +"  ->  "+ re1->Replace(textBox2->Text, "$1") + "\r\n";
    }


已启动生成...
1>------ 已启动生成: 项目: RegexPractice, 配置: Debug x64 ------
1>RegexPractice.cpp
1>D:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.32.31326\include\vector(900,1): error C3699: “&&”: 不能在类型“_Ty”上使用此间接寻址
1>        with
1>        [
1>            _Ty=System::String ^
1>        ]
1>C:\Users\Administrator\source\repos\RegexPractice\RegexPractice\Form1.h(109): message : 查看对正在编译的 类 模板 实例化“std::vector<System::String ^,std::allocator<_Ty>>”的引用
1>        with
1>        [
1>            _Ty=System::String ^
1>        ]
1>D:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.32.31326\include\vector(943,1): error C3699: “&&”: 不能在类型“_Ty”上使用此间接寻址
1>        with
1>        [
1>            _Ty=System::String ^
1>        ]
1>已完成生成项目“RegexPractice.vcxproj”的操作 - 失败。
========== “生成”: 0 成功,1 失败,0 更新,0 已跳过 ==========


vector容器问题
std::vector<std::string>StrArr 可以, 如果换成  std::vector<String^> StrArr 就出这个问题了。不知道如何解决。。。


只有本站会员才能查看附件,请 登录


[此贴子已经被作者于2022-12-14 13:42编辑过]

2 回复
#2
rjsp2022-12-14 15:49
对于 123\\abc\\ABC,第一个字符 1 是不是被 .?:?[\\\\]?(.*) 中的 .? 给吃了?
好在你还没写 1\\abc\\ABC,否则 1\\ 两个字符被吃掉。

顺便问一下,为什么不用 std::filesystem,却用 regex 这种丑陋低效(而且理论上无法完成path检索)的东西?
#3
追梦人zmrghy2022-12-14 16:23
回复 2楼 rjsp
不知道,怎么写了刚能达到时需要的效果,才来发帖请教的。
1