所以对于PCRE(PHP(正则表达式,我正在尝试从开发团队的大型机平台上的搜索中读取输出。
我需要解析出文件名,以便我可以重新加入我正在跟踪系统迁移详细信息的其他列表。
到目前为止,我的表达是在这里 Regex101.com 示例数据。 我确信我可以引入更高的效率,但现在我希望在我走这条路之前满足要求。
这是供参考的代码
^(?#
Objective is to capture the first two columns: program name and line number. This part is easy
I'm able to skip lines with comments and start parsing at the 'QRY' string.
Challenge is I would like to skip lines like this
.*/*QRY.*$
and include lines like this [end comment appears before the 'QRY' string]
.*/*.**/QRY.*$
Check for comment indicator and skip lines with comments
)(?!.*/*.*(?!*/)QRY)(?#
)(?#
Program name
)^(?<prgName>.+?)[[:blank:]](?#
QRY clause
)(?:.*QRY((?<qryName>.*?)))*(?#
FILE or QRYFILE clause
)(?:.*FILE(((?<qryFile01>.*?))(?:[[:blank:]]((?<qryFile02>.*?))))*)*
尝试'~(?mi)(?:(?:^.*?/*(?:(?!*/).)*QRY.*$(*SKIP)(*FAIL))|^(?<prgName>.+?)[[:blank:]](?:.*QRY((?<qryName>.*?)))*(?:.*FILE(((?<qryFile01>.*?))(?:[[:blank:]]((?<qryFile02>.*?))))*)*)~'
特征
- 仅面向行,不验证注释
- 如果 QRY 在评论开始后开始,则 SKIP 的行
- 通过QRY在评论之外的行
演示