【问题标题】:regex "something or nothing" match正则表达式“有或无”匹配
【发布时间】:2015-05-07 08:46:32
【问题描述】:

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

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

我出来了

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

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

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

【问题讨论】:

  • \/A\/B\/C\/D\/([^\/]+)\/([^\/]+)?(?:\.)?([^\/]+)\.(log|trc) 呢?
  • 请更具体地说明您要查找的内容以及您的结果是什么?
  • 你需要更具体一些;不要只说什么会匹配,还要说什么不匹配(并用文字或例子描述你想要什么,你确实做了什么)。这是与您的两个示例都匹配的另一种模式:.* 此外,标题绝对没有信息。

标签: regex pcre splunk


【解决方案1】:

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

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

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

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

Demo 1 Demo 2

【讨论】:

    【解决方案2】:

    如何使用行尾锚点?

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

    【讨论】:

      猜你喜欢
      • 2014-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多