【问题标题】:Regex replacement for URI in vrl (vector.dev)vrl (vector.dev) 中 URI 的正则表达式替换
【发布时间】:2022-06-28 15:31:19
【问题描述】:

我需要一个正则表达式来替换会创建高基数情况的 URI 片段。

基本上,如果 URI 的段包含任何非 a-zA-Z 字符(/ 除外),则将其替换为 *

例子:

$ replace("/first/12ab34/B1a234/12B3a/1234/second/A789B-89d", r'(?i)[a-z]*\d+(?i)[a-z]*',"*")

结果:"/first/**/**/**/*/second/*-*"

差不多了,但我需要"/first/*/*/*/*/second/*"

可以接受多次替换。那里有任何正则表达式大师愿意提供帮助吗? 这是用 Rust 编写的 vrl (vector.dev)。 VRL 不支持任何形式的环视。

【问题讨论】:

    标签: regex vector-vrl


    【解决方案1】:

    对于示例数据,您可以使用

    (?i)[a-z]*\d[\da-z]*(?:-[\da-z]+)*
    
    • (?i) 不区分大小写的内联修饰符
    • [a-z]* 匹配可选字符 a-z
    • \d 匹配单个数字
    • [\da-z]* 匹配可选数字或字符 a-z
    • (?:-[\da-z]+)* 可选择重复 - 和 1+ 次数字或 a-z

    Regex demo

    【讨论】:

    • 终于落户(?i)[a-z.-]*\d[\da-z.-]*(?:-[\da-z.-]+)* 谢谢!大帮助
    【解决方案2】:

    使用

    [^/\d]*\d[^/]*
    

    regex proof

    解释

    --------------------------------------------------------------------------------
      [^/\d]*                  any character except: '/', digits (0-9) (0
                               or more times (matching the most amount
                               possible))
    --------------------------------------------------------------------------------
      \d                       digits (0-9)
    --------------------------------------------------------------------------------
      [^/]*                    any character except: '/' (0 or more times
                               (matching the most amount possible))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-10
      • 1970-01-01
      • 2019-01-24
      • 2011-07-13
      • 2015-01-24
      • 1970-01-01
      相关资源
      最近更新 更多