如何在URL中提取字母数字值?我有以下查询未替换正确的值。
示例输入数据:
/example/endpoint/here/34456dwf45
/endpoint/fddk449372
/434236/example/endpoint
预期输出:
/example/endpoint/here/my_var
/endpoint/my_var
/my_var/example/endpoint
当前查询:
* | rex mode=sed field=request_url "s/(.*\\/)[^\/]+(\/.*)/\1my_var\2/"
| stats values(request_url)
如何使用sed将两个/字符内的任何字母数字值替换为URL内的字符串?
答案 0 :(得分:1)
您可以使用以下sed
命令:
"s,(^|/)[[:alpha:]]*[[:digit:]][[:alnum:]]*($|/),\1my_var\2,"
或者,要替换重叠的匹配项和所有匹配项,请使用(?![^/])
而不是($|/)
,并在末尾添加g
标志:
"s,(^|/)[[:alpha:]]*[[:digit:]][[:alnum:]]*(?![^/]),\1my_var,g"
请参见first regex demo和second regex demo。
s
在这里意味着我们需要替换字符串。分隔符为,
(逗号),因为这样我们就不必转义正斜杠。
(^|/)[[:alpha:]]*[[:digit:]][[:alnum:]]*($|/)
模式匹配
(^|/)
-第1组(\1
):直线开始或/
[[:alpha:]]*[[:digit:]][[:alnum:]]*
-0+个字母,一个数字,然后是0个或多个数字或字母($|/)
-第2组(\2
):行尾或/
(?![^/])
-是一个否定的超前查询,匹配的位置不是紧跟着/
的任何字符,而是紧随其后的位置。