如何编写PCRE正则表达式捕获特定字符前的目标内容?
PCRE正则提取特定日志内容解决方案
可用正则表达式
直接用以下两种正则之一即可精准提取目标内容:
方案1:非贪婪匹配+正向预查
\bNo.*?(?=\(ID:)
\bNo:锁定以完整单词"No"开头的片段,避免匹配类似"XNo"的错误内容.*?:非贪婪模式的任意字符匹配,会尽可能少地抓取内容,直到满足后续断言条件(?=\(ID:):正向预查断言,仅判断后续紧跟"(ID:",但不会将这部分纳入匹配结果
方案2:排除字符类精准匹配
\bNo[^(]+
\bNo:同样锁定单词边界后的"No"[^(]+:匹配所有非"("的字符,直到遇到第一个"("就停止,刚好截取到目标内容的结尾
原正则问题分析
\bNo.+[\(]:.+是贪婪匹配,会抓取到最后一个"("的位置,且[\(]会把"("包含在结果里,导致多余字符\bNo.+[^\(]:.+贪婪匹配到字符串末尾,[^\(]仅匹配末尾一个非"("字符,最终得到的是从"No"开始到日志结尾的全部内容
内容的提问来源于stack exchange,提问作者Chad
相关产品推荐
相关产品推荐

