【发布时间】:2016-11-03 21:38:46
【问题描述】:
我需要使用与 Perl 兼容的正则表达式来匹配文件中多行出现的多个字符串。
匹配项需要以任意顺序出现(服务器 servernameA.company.com 后跟 servernameZ.company.com 后跟 servernameD.company.com 或三者的任意顺序组合)。 注意:所有匹配项都会出现在每行的开头。
在我对grep -P 的测试中,我什至无法对以任何顺序出现在新行上的简单字符串术语产生匹配(即使使用/s 和/m 修饰符)。从阅读中我很确定我需要一个前瞻断言,但即使在分析了正则表达式的每一位以确保它与我的场景相关之后,我使用的样本也没有为我产生匹配。
由于我需要在生产中支持这一点,我想要一个简单且相对直接的解释。
示例输入
irrelevant_directive = 0
# Comment
server servernameA.company.com iburst
additional_directive = yes
server servernameZ.company.com iburst
server servernameD.company.com iburst
# Additional Comment
final_directive = true
期待
当且仅当字符串“serverA.company.com”、“serverZ.company.com”和'serverD.company.com' 后跟 iburst。必须包含所有 3 个字符串。
最后,如果答案(或非常相似的答案形式)可以在 single 行上以任何顺序检查字符串,那将非常有帮助。例如,如果我有一个单行字符串:preauth param audit=true silent deny=5 severe=false unlock_time=1000 time=20ms,并且我想确保术语 deny=5 和 time=20ms 以任意顺序出现并且匹配。
提前感谢您的帮助。
【问题讨论】:
-
你说的是 PCRE 还是 Perl 程序?
-
感谢您的快速回复并查看此内容。 PCRE 专门。我将使用带有
grep -P的命令。请刷新,因为我在我之前遗漏的正则表达式的预期输出上添加了一个新的简短部分。 -
那么请不要使用 Perl 进行标记。我会删除标签。有一个成熟的程序可以解决这个问题,但是在一个正则表达式中做到这一点会很困难。
标签: pcre multiline lookahead negative-lookahead