目标句:
$(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;如何构造regex以提取包含"....\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\.*;发布于 2014-07-23 19:26:13
您的问题很可能是*是一个贪婪的运算符。它比你想的要更贪婪地匹配。在许多regex方言中,*?是不情愿的运算符。我首先试着这样使用它:
\$.*?ccc\\1234.*?;您可以阅读更多关于贪婪和不情愿的运营商在这个问题上。
如果这不起作用,您可以尝试对匹配的字符比.更具体。例如,可以用如下表达式匹配每个非分号字符:[^;]*。你可以用这样的方法:
\$[^;]*ccc\\1234[^;]*;发布于 2014-07-23 19:25:18
下面的regex将将捕获的字符串存储在组1中。
(\$.*?ccc\\1234\\.*?;)您需要使*量词通过在*旁边添加?来完成最短匹配。而且这个\.*匹配一个文字点0或更多次。这是错误的。
演示
发布于 2014-07-24 06:32:58
我发现这是最好的:
\$(.[^\$;])*ccc\\1234(.[^\$;])*;它不允许任何过匹配,如果我使用?,它仍然匹配更多的$或;不止一次出于某种原因,但使用上述表达式,这将永远不会是这样的。仍然感谢所有花时间回答我问题的人。
https://stackoverflow.com/questions/24919040
复制相似问题