当前位置: 首页 > 面试题库 >

需要多行搜索的正则表达式(grep)

公冶高峯
2023-03-14
问题内容

我运行一个grep发现有任何字*
.sql文件select后跟字customerName后面的字from。该select语句可以跨越很多行,并且可以包含制表符和换行符。

我已经尝试了以下几种变体:

$ grep -liIr --include="*.sql" --exclude-dir="\.svn*" --regexp="select[a-zA-Z0-
9+\n\r]*customerName[a-zA-Z0-9+\n\r]*from"

但是,这将永远持续下去。谁能用正确的语法帮助我?


问题答案:

无需安装grep变体pcregrep,您可以使用grep进行多行搜索。

$ grep -Pzo "(?s)^(\s*)\N*main.*?{.*?^\1}" *.c

说明:

-P激活grep的perl-
regexp
(正则表达式的强大扩展)

-z禁止在行尾换行,用空字符代替。也就是说,grep知道行尾在哪里,但是将输入视为一条大行。

-o仅打印匹配项。因为我们使用-z,所以整个文件就像一条大行,因此,如果有匹配项,则将打印整个文件;这样就不会那样做。

在正则表达式中:

(?s)Activate PCRE_DOTALL,这意味着.找到任何字符或换行符

\N找到除换行符以外的任何内容,即使已PCRE_DOTALL激活

.*?``.在非贪婪模式下查找,即尽快停止。

^ 找到行的起点

\1向后引用第一组(\s*)。这是尝试找到方法的相同缩进的尝试。

可以想象,此搜索将主方法打印在C(*.c)源文件中。



 类似资料:
  • 问题内容: 我需要找到与特定正则表达式匹配的所有软件包: 基本上,包的名字应该与启动,并有后话。例如,以下软件包应匹配: 我可以做,但是有很多我不感兴趣的软件包。 是否提供通过正则表达式查找软件包的方法?或者,我应该只是通过管道传递结果来过滤掉无关的包? 此外,可能是一个的“交集” ,并有助于太。 问题答案: alecxe,我相信这是您要寻找的一线客。 如下面评论中铬酸盐所建议的那样,您可以根据需

  • 我需要一个正则表达式来检查和删除< code > membership user < code > userName 中的特殊字符。 当我第一次将网站设置为测试版时,我没有考虑到特殊字符不是获取用户名的好方法,“在我的应用程序中”。 下面我有一段模板代码,写得不太正确,但是给了愿意帮助的人一个好的开始。 --我需要从用户名中删除所有特殊字符和空格,同时更新用户名。 当我说我所说的特殊字符~、`、!

  • 问题内容: 我有一个模式定义为的猫鼬模型- 并且模型定义为- 现在我想从请求对象参数中搜索标题,标签,描述字段,例如 现在,我如何确保也包括任何在标题或描述中找到该术语的结果,而不仅是两个结果都存在。另外,如何在标签数组中搜索匹配的字符串 问题答案: 您可以在猫鼬中使用 $ or 运算符返回匹配项 $ or http://docs.mongodb.org/manual/reference/oper

  • 问题内容: 我需要在给定正则表达式的字符串中找到所有匹配项。我一直在这样做,直到遇到一个案例,它没有达到我的预期。例如: 在这种情况下,返回我需要的内容(最长的匹配项),但是行为却有所不同,尽管文档暗示它应该是相同的: 匹配所有出现的模式,而不仅仅是第一个。 为什么行为不同? 如何获得with (或其他方式)的结果? 问题答案: 好的,我从文档中查看发生了什么…… 如果该模式中存在一个或多个组,则

  • 问题内容: 我有这个正则表达式使用向前和向后的前瞻: 我正在尝试将其从C#移植到Python,但始终收到错误 是否有可能用Python重写而不会失去意义? 这个想法是为了匹配类似 更新资料 我正在使用环顾四周解析已修改的HTTP多部分文本 我想在进行拆分时只获取文件路径和其他文本,而不必删除开始和结束标签 简短的代码很重要,但是如果它使正则表达式可行,我愿意更改格式。 问题答案: 对于同一数组中的