正则表达式 "something or nothing" 匹配

regex "something or nothing" match

我正在尝试构建一个正则表达式来捕获下面两个文件中的 TEXT*

/A/B/C/D/TEXT1/TEXT2.TEXT3.log
/A/B/C/D/TEXT1/TEXT2.trc

我出来了

/A/B/C/D/([^\/]+)/([^\/]+)?(?:\.)?([^\/]+)\.(log|trc)

它没有像我预期的那样工作。

基本上,我需要从两个示例中捕获所有 TEXT1TEXT2TEXT3 字段(如果它们存在)以供进一步使用;如果不是,就像第二行的情况一样,只有 TEXT1TEXT2.

使用行尾锚点怎么样?

/\/([^\/]\/[^\/]?)\.(log|trc)$/

您可以使用这个正则表达式:

\/A\/B\/C\/D\/([^\/]+)\/(\w+)?(?:\.(\w+))?\.(?:log|trc)

如果你有其他字符而不只是字母、数字或下划线(由 \w 捕获),你可以限制为 [^.]+:

\/A\/B\/C\/D\/([^\/]+)\/([^.]+)?(?:\.([^.]+))?\.(?:log|trc)

Demo 1 and Demo 2