目标句子:
$(SolDir)..\..\ABC\ccc\1234\ccc_am_system;$(SolDir)..\..\ABC\ccc\1234\ccc_am_system\host;$(SolDir)..\..\ABC\ccc\1234\components\fds\ab_cdef_1.0\host; $(SolDir)..\..\ABC\ccc\1234\somethingelse;
我应该如何构建我的正则表达式以提取项目包含" .. \ .. \ ABC \ ccc \ 1234 \ ccc_am_system"
基本上,我想提取所有这些文件夹,可能更多,它们都在\ ABC \ ccc \ 1234 \ ccc_am_system:
$(SolDir)..\..\ABC\ccc\1234\ccc_am_system\host\abc;
$(SolDir)..\..\ABC\ccc\1234\ccc_am_system\host\123\123\123\123;
$(SolDir)..\..\ABC\ccc\1234\ccc_am_system\host;
我当前的正则表达式不起作用,我无法弄清楚为什么
\$.*ccc\\1234\.*;
答案 0 :(得分:1)
您的问题很可能是*
是一个贪婪的运算符。它贪婪地匹配比你想要的更多。在许多正则表达式方言中,*?
是不情愿的运算符。我会先尝试使用它:
\$.*?ccc\\1234.*?;
您可以阅读更多有关贪婪与不情愿的操作员in this question的信息。
如果这不起作用,您可以尝试使用匹配的字符比.
更具体。例如,您可以将每个非分号字符与以下表达式匹配:[^;]*
。你可以这样使用这个想法:
\$[^;]*ccc\\1234[^;]*;
答案 1 :(得分:0)
答案 2 :(得分:0)
我发现这是最好的:
\$(.[^\$;])*ccc\\1234(.[^\$;])*;
它不允许任何过度匹配,如果我使用?,它仍然匹配更多$或;不止一次由于某种原因,但有了上述表达,这将永远不会是这种情况。还要感谢所有花时间回答我的问题的人,。