从 URL 中删除特定单词的正则表达式
Regex to remove the specific word from URL
在 Dynatrace 中,有 URLs 包含动态的单词。想要使用正则表达式
从 URL 中删除该动态词
以下是不同的网址
- /aaa/fdsadx/drtyu/ab_cd/myword?id=953
- /asd/XXXXX/sadsa/two/xx_yy?id=953
- /asd/fdsadx/df/three/pp_qq/myword
- /asd/fdsadx/sadsa/ab_cd
- /SSS/fdsadx/cvnm/forth/gg_hh
预期输出
- /asd/fdsadx/sadsa//myword?id=953
- /asd/fdsadx/sadsa/?id=953
- /asd/fdsadx/sadsa//我的单词
- /asd/fdsadx/sadsa/
我能够管理这个正则表达式
(\S+?)ab_cd(.*)
但它不适用于动态值和所有 URL。
如何改进正则表达式以删除动态值?
第一部分似乎是固定的,您在“/”或“?”之后修剪所有内容。鉴于此,也许你想要这样的东西:
s/(\/asd\/fdsadx\/sadsa\/)[^/?]+(.*)//
这将捕获 \1 中的头部,忽略一组不是 '\' 或 '?' 的字符,并捕获 \2 中的尾部。
您可以使用 2 个捕获组并在匹配正斜杠后匹配下划线部分
^(\S+/)[^\s_]+_[^\s_/?]+(.*)
^
字符串开头
(\S+/)
捕获 组 1,匹配 1+ 次非空白字符后跟 /
[^\s_]+
匹配任何字符 1 次以上,空白字符除外或 _
_
字面匹配
[^\s_/?]+
匹配任何字符 1 次以上,空白字符除外,_
、/
或 ?
(.*)
捕获 组 2 匹配除换行符之外的任何字符 0 次以上
在替换中使用 2 个捕获组,例如 </code></p>
<p>如果您想匹配国家/地区代码并且您知道它们由字符 a-zA-Z 组成,您可以使 <a href="https://www.regular-expressions.info/charclass.html" rel="nofollow noreferrer">character class</a> 更具体</p>
<pre><code>^(\S+/)[A-Za-z]+_[A-Za-z]+(.*)
在 Dynatrace 中,有 URLs 包含动态的单词。想要使用正则表达式
从 URL 中删除该动态词以下是不同的网址
- /aaa/fdsadx/drtyu/ab_cd/myword?id=953
- /asd/XXXXX/sadsa/two/xx_yy?id=953
- /asd/fdsadx/df/three/pp_qq/myword
- /asd/fdsadx/sadsa/ab_cd
- /SSS/fdsadx/cvnm/forth/gg_hh
预期输出
- /asd/fdsadx/sadsa//myword?id=953
- /asd/fdsadx/sadsa/?id=953
- /asd/fdsadx/sadsa//我的单词
- /asd/fdsadx/sadsa/
我能够管理这个正则表达式
(\S+?)ab_cd(.*)
但它不适用于动态值和所有 URL。 如何改进正则表达式以删除动态值?
第一部分似乎是固定的,您在“/”或“?”之后修剪所有内容。鉴于此,也许你想要这样的东西:
s/(\/asd\/fdsadx\/sadsa\/)[^/?]+(.*)//
这将捕获 \1 中的头部,忽略一组不是 '\' 或 '?' 的字符,并捕获 \2 中的尾部。
您可以使用 2 个捕获组并在匹配正斜杠后匹配下划线部分
^(\S+/)[^\s_]+_[^\s_/?]+(.*)
^
字符串开头(\S+/)
捕获 组 1,匹配 1+ 次非空白字符后跟/
[^\s_]+
匹配任何字符 1 次以上,空白字符除外或_
_
字面匹配[^\s_/?]+
匹配任何字符 1 次以上,空白字符除外,_
、/
或?
(.*)
捕获 组 2 匹配除换行符之外的任何字符 0 次以上
在替换中使用 2 个捕获组,例如 </code></p>
<p>如果您想匹配国家/地区代码并且您知道它们由字符 a-zA-Z 组成,您可以使 <a href="https://www.regular-expressions.info/charclass.html" rel="nofollow noreferrer">character class</a> 更具体</p>
<pre><code>^(\S+/)[A-Za-z]+_[A-Za-z]+(.*)