首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >长句与关键词的匹配

长句与关键词的匹配
EN

Stack Overflow用户
提问于 2014-07-23 19:16:15
回答 3查看 29关注 0票数 1

目标句:

代码语言:javascript
复制
$(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下面:

代码语言:javascript
复制
$(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;

我现在的判断器不起作用了,我也不知道为什么

代码语言:javascript
复制
\$.*ccc\\1234\.*;
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-07-23 19:26:13

您的问题很可能是*是一个贪婪的运算符。它比你想的要更贪婪地匹配。在许多regex方言中,*?是不情愿的运算符。我首先试着这样使用它:

代码语言:javascript
复制
\$.*?ccc\\1234.*?;

您可以阅读更多关于贪婪和不情愿的运营商在这个问题上

如果这不起作用,您可以尝试对匹配的字符比.更具体。例如,可以用如下表达式匹配每个非分号字符:[^;]*。你可以用这样的方法:

代码语言:javascript
复制
\$[^;]*ccc\\1234[^;]*;
票数 1
EN

Stack Overflow用户

发布于 2014-07-23 19:25:18

下面的regex将将捕获的字符串存储在组1中。

代码语言:javascript
复制
(\$.*?ccc\\1234\\.*?;)

您需要使*量词通过在*旁边添加?来完成最短匹配。而且这个\.*匹配一个文字点0或更多次。这是错误的。

演示

票数 0
EN

Stack Overflow用户

发布于 2014-07-24 06:32:58

我发现这是最好的:

代码语言:javascript
复制
\$(.[^\$;])*ccc\\1234(.[^\$;])*;

它不允许任何过匹配,如果我使用?,它仍然匹配更多的$或;不止一次出于某种原因,但使用上述表达式,这将永远不会是这样的。仍然感谢所有花时间回答我问题的人。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24919040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档