我需要使用Perl兼容正则表达式来匹配出现在文件中多行的多个字符串。PCRE正则表达式 - 如何返回匹配多行字符串以任意顺序查找多个字符串
这些匹配需要以任何顺序出现(服务器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
期望
正则表达式应该匹配,并返回3号线与服务器开始(即按任何顺序出现),当且仅当是绝配对于strings'serverA.company.com','serverZ.company.com'和'serverD.company.com',随后是iburst。所有3个字符串必须包含在内。
最后,如果答案(或答案的一个非常相似的形式)可以解决以单行行的任何顺序检查字符串,那将是非常有用的。例如,如果我有一个单行字符串:preauth param audit=true silent deny=5 severe=false unlock_time=1000 time=20ms
,并且我想确保条款deny=5
和time=20ms
以任何顺序出现,并且如果匹配。
非常感谢您的帮助。
你是在谈论PCRE还是关于Perl程序? – simbabque
感谢您的快速反应,并看着这个。 PCRE具体。我将使用'grep -P'命令。请刷新,因为我添加了一个新的关于预先输出的正则表达式,这是我之前忽略的。 –
然后请不要用Perl标记。我将删除标签。有一个完整的程序解决这个问题,但在一个正则表达式中这样做会很困难。 – simbabque