regex vrl(vector.dev)中URI的正则表达式替换

9q78igpj  于 2022-12-24  发布在  其他
关注(0)|答案(3)|浏览(125)

我需要一个正则表达式来替换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不支持任何形式的查找。

qlfbtfca

qlfbtfca1#

对于示例数据,可以使用

(?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

pxq42qpu

pxq42qpu2#

用途

[^/\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))
9udxz4iz

9udxz4iz3#

第一个月
regex demo

解释

  • [^/a-zA-Z]-正好一个“非a-zA-Z字符(/除外)”
  • [^/]*-零个或多个非“/”字符

中间部分将保证路径元素至少有一个“non a-zA-Z”字符。侧边部分将匹配所有内容,直到包含“/”(不包括)。所有这三个部分一起将匹配整个路径元素,其中至少有一个“non a-zA-Z”字符。

更多测试

$ replace("12ab34/first/B1:a234/12B3a/12_34//second/4931962a-4478-4151-b570-3329b9d29b1f/third_/-fourth", r'[^/]*[^/a-zA-Z][^/]*',"*")
"*/first/*/*/*//second/*/*/*"
  • 它将匹配没有前导/尾随斜杠的路径元素
  • :匹配为非a-zA-Z字符
  • 不替换空路径元素//
  • 它将匹配具有多个非a-zA-Z字符路径元素
  • 它将匹配非a-zA-Z字符位于开头/结尾的路径元素

相关问题