【问题标题】:Regular expression for a file that does not have a line that starts with a specific word没有以特定单词开头的行的文件的正则表达式
【发布时间】:2021-06-23 03:45:07
【问题描述】:

我想搜索整个文件而不仅仅是一行。 ^((?!MYWORD).)*$ 如果我理解正确,这将搜索该行不以提供“。”的单词“MYWORD”开头。当然不包括换行符。所以我想检查文件中的任何一行都没有这样的行。

所以如果我的文件包含:

xyz
MYWORD is here
123

然后我排除这个文件。

请注意,我在 NotePad++ (v7.9.1) 的“在文件中查找”对话框中输入正则表达式,我在其中指定了一个文件夹,因此我想搜索文件夹中的所有文件。

实际示例在 .sql 文件中查找没有“CREATE”子句的文件。

我知道聪明的人会说使用找到你想要的 MYWORD 的表达式然后你可以消除这些,但你知道我想知道它是否可能。

【问题讨论】:

  • 您的目标是获得 positive 匹配项列表、不以 MYWORD 开头的文件,还是想要一个 negative 列表i> 匹配,不匹配的文件?
  • 为什么不用多行标志(m)? /^(?!MYWORD).*/gm
  • ^((?!MYWORD).)*$ 匹配不包含 MYWORD 的行任何地方,而不仅仅是开头。
  • 是的正匹配不包含以“MYWORD”开头的行。我确实尝试过 /.../gm 方法,只是在我写这篇文章的时候不记得语法了,无论如何我试过了,但它什么也没返回,所以我想也许它忽略了这个??!!
  • 答案成功了吗?

标签: regex notepad++


【解决方案1】:

如果您想查找不包含 CREATE 的文件,您可以在 Find in Files 选项卡中使用此模式:

(?s)\A(?!.*\bCREATE\b)
  • (?s) 内联修饰符,点匹配换行符
  • \A 字符串开始
  • (?!.*\bCREATE\b) 在文本中使用单词边界断言不是单词 CREATE \b

Regex demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-17
    • 2015-06-24
    相关资源
    最近更新 更多