gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 11:14:37 27 4
gpt4 key购买 nike

目的

该 RegEx 的目的是在支持正则表达式的 Sublime Text 3 的“在文件中搜索”功能上使用它。

目标

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

我的扣除额

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

示例:

I have many of files that are named ListaController, and i want to find only the ones that have requires: inside of it.

ListaController is the name of the files that i want to search.

requires: is the word i want to find insile files that are ListaController's

所以我需要一个可以在同一文件上匹配 (ListaControllerrequires:) 的正则表达式,以仅显示匹配这两个词的文件。

我试过的

我做到的最接近的是 RegEx:

\bListaController\b|\brequires:\b

这导致我只有 ListaController 整个单词的结果,没有一个 requires: 结果。

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

Obs:如果有更简单/更好的解决方案可以在不使用正则表达式的情况下在 sublime 上执行我想要的操作,我将很高兴看到它,也许这将是我的最终解决方案。

最佳答案

\bListaController\b|\brequires:\b当前任务的模式不正确,因为它搜索整个单词 ListController (| 是一个alternation operator )requires:用单词字符(数字、字母或 _ )括起来。

您想匹配一个同时包含 ListController 的文件和 requires:作为整个单词,这可能与 .* 交替出现在两种模式之间,或者只使用 lookahead基于正则表达式。后一种类型实际上是首选,因为它不那么麻烦,并且只需要使用一次子模式。

你可以使用

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

参见 regex demo .

详情

  • (?s) - 启用 . 的 DOTALL 模式匹配默认不匹配的换行字符
  • \A - 文件开头
  • (?=.*?\bListaController\b) - 需要任何 0+ 个字符的正面前瞻,尽可能少(*? 是惰性量词),最多为整个单词 ListaController将其立即包含在字符串中当前位置的右侧(即,从文件的开头开始)
  • (?=.*?\brequires:) - 一个积极的前瞻,需要任何 0+ 个字符,尽可能少,最多一个完整的单词 requires:将它立即包含在字符串中当前位置的右侧(也就是说,再次从文件的开头开始,因为先行是零宽度断言,当它们的模式匹配时不会移动正则表达式索引。)

关于regex - 如何创建匹配两个或多个特定完整单词的正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46652693/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com