【发布时间】:2014-03-06 23:01:13
【问题描述】:
我正在使用以下正则表达式在同一文件中查找 foo 和 bar 的实例,这些实例可能位于不同的行:
$ pcregrep --color -Mi '(foo[\d\D]*bar)?(bar[\d\D]*foo)?' *
如何将其限制为在 ±5 行上显示单词?
我熟悉 {0,5} 量词,但我真的不知道如何设计查询。我在想像这样丑陋的东西,但我似乎无法正确地设计它:
[\d\D](\n[\d\D]){0,5}
上面返回如下结果:
pcregrep: Error in command-line regex at offset 26: nothing to repeat
【问题讨论】:
-
有什么理由使用
[\d\D]而不是.? -
试试
foo([^\n]*\n?){0,4}bar(未经测试)。这应该会找到foo和bar,它们之间最多有4 个换行符和任意数量的其他字符。您应该能够轻松地将其调整为bar...foo。 -
其实应该是
foo([^\n]*\n?){0,4}[^\n]*bar,如果bar不能保证在行首。 -
@n.st:我在使用
.时遇到问题,请参阅this related question。谢谢!