正则表达式:在第三个斜杠后替换 URL 上的所有数字

Regexp: replace all digits on URL after third slash

如何用正则表达式替换字符 #### 上第三个斜杠后 URL 中的所有数字? 在这种情况下,# 的数量必须对应于替换数字的数量。 数字可以位于多个斜线部分。 另外,数字的位置不是固定的,而是正好在第三个斜杠之后

示例:

/path/to/something/1234/end
/path/to/something/12/1234/end

收件人:

/path/to/something/####/end
/path/to/something/##/####/end

我尝试使用表达式,但没有给出所需的结果:

"(?<=/)\d+(?=/|$), #####"

在 Logstash(gsub 函数)中实现 grok 模式需要此正则表达式。

P.s。为什么在第三个斜线之后?因为因为数字可以在开头,但是不需要改变(/path/to_1/something/1234/end)

您可以使用

(?:\G(?!^)|^((?:/[^/]*){3}/))(\D*)\d

作为正则表达式,#作为替换。

参见regex demo

详情:

  • (?:\G(?!^)|^((?:/[^/]*){3}/)) - 上一场比赛结束 (\G(?!^)) 或 (|) 字符串开始 + 出现三次 / 然后零个或多个 non-slash shars 然后一个斜杠字符捕获到组 1 (^((?:/[^/]*){3}/))
  • (\D*) - 第 2 组:任何零个或多个 non-digits
  • \d - 一个数字

替换是组 1 + 组 2 值和 # 字符的串联。