如何在grep中进行非贪心匹配?


Answers:


276

您正在寻找非贪婪(或懒惰)的比赛。要在正则表达式中获得非贪婪匹配,您需要?在量词后使用修饰符。例如,您可以更改.*.*?

默认情况下grep不支持非贪婪修饰符,但是您可以使用grep -PPerl语法。


3
eegg:点所有修饰符也称为多行。它是一个修饰符,用于更改“。” 匹配行为以包含换行符(通常不包含换行符)。grep中没有这样的修饰符,而pcregrep没有
威尔逊

1
更正:在大多数支持它的正则表达式中,允许.与换行符匹配的模式称为DOTALL单行模式。Ruby是唯一将其称为multiline的工具。在其他形式中,多行是允许锚点(^$)在行边界匹配的模式。Ruby没有等效的模式,因为在Ruby中它们始终以这种方式工作。
艾伦·摩尔

5
-P对我来说是一个全新的东西,我开心地偷偷摸摸地走了好多年,只用了-E...浪费了这么多年!-关于自己的注意事项:作为(甚至更多!)常规内容来重新阅读手册页,您永远不会消化足够的开关和选项。
ocodo

29
在某些平台(例如Mac OS X)grep上不支持-P,但是如果使用egrep,可以使用该.*?模式来达到相同的结果。egrep -o 'start.*?end' text.html
SaltyNuts 2014年

4
作为@SaltyNuts注释的扩展,Mac OS X不支持,-P-E会调用,egrep因此建议的.*?效果很好。
Fredrik Erlandsson 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.