如何创建匹配两个或更多特定整个单词的正则表达式?

时间:2017-10-09 18:20:49

标签: regex search sublimetext3

目的

RegEx的目的是在Sublime Text 3" Search in Files"支持正则表达式的函数。

目标

我的目标是实现一个搜索,找到特定文件名上的特定整个单词,加上文件名被定义为文件本身内部的字符串,所以它可能会使事情变得更容易。

我的扣除

我正在考虑如何执行它,我意识到如果我可以创建一个在同一个文件上搜索两个完整单词的正则表达式,它就解决了我的问题,因为文件名也在文件中。

实施例

  

我有许多名为ListaController的文件,我想只找到其中​​包含requires:的文件。

     

ListaController是我要搜索的文件的名称。

     

requires:这个词我想找到ListaController

的文件

所以我需要一个可以在同一个文件上匹配(ListaControllerrequires:)的RegEx,以便只显示匹配两个单词的文件。

我尝试了什么

我确实达到的最接近的是RegEx:

\bListaController\b|\brequires:\b

这导致我只有ListaController全字结果而且requires:没有结果。

所以我需要一些帮助来创建一个适合的RegEx。

Obs:如果有一个更简单/更好的解决方案来执行我想要的sublime而不使用正则表达式,我将很高兴看到它,也许这将是我的最终解决方案。 < / p>

2 个答案:

答案 0 :(得分:1)

如果要搜索文件中的字符串,可以使用文件名过滤器,使用&#34; Where&#34;特征。将requires:放在查找框中,将*ListaController*放在框

答案 1 :(得分:1)

\bListaController\b|\brequires:\b模式对于当前任务不正确,因为它搜索整个单词ListController |是{{3} } requires:附有单词字符(数字,字母或_)。

您希望将包含ListControllerrequires:的文件作为整个单词进行匹配,并且可以在两种模式之间使用.*进行替换,或仅使用基于alternation operator的正则表达式。后一种类型实际上是优选的,因为它不那么麻烦,并且仅需要仅使用子模式一次。

您可以使用

(?s)\A(?=.*?\bListaController\b)(?=.*?\brequires:)

请参阅lookahead

<强>详情

  • (?s) - 一种DOTALL模式,可让.匹配默认情况下不匹配的换行符
  • \A - 文件开头
  • (?=.*?\bListaController\b) - 一个积极的前瞻,需要任何0+字符,尽可能少(*?是一个懒惰的量词),直到整个单词ListaController,包括它立即到字符串中当前位置的右边(即从文件的开头)
  • (?=.*?\brequires:) - 一个积极的前瞻,需要任何0+字符,尽可能少,直到整个单词requires:,包括它立即在字符串内的当前位置的右边(即同样,从文件的开头,因为前瞻是零宽度断言,当它们的模式匹配时不会移动正则表达式索引。)