在URL查询字符串上使用搜索和替换

时间:2015-12-07 22:25:28

标签: regex vba

所以我的公司重建了他们的整个内部网,由于他们没有实施301重定向,现在公司Word文档中存在大量无效链接。

我创建了一个宏但需要有关正则表达式的帮助,以便找到格式的链接:

http://foo/bar/baz.php?id=string1:string2:string3:string4

并将其替换为:

https://abc/def/ghi/string1/string2/string3/string4.aspx

请注意,string2,string3和string4并不总是存在。

我的尝试

搜索:http://foo/bar/baz.php\?id=([\w]*):?([\w]*):?([\w]*):?([\w]*) 替换:https://abc/def/ghi/$1/$2/$3/$4.aspx

这个问题是如果不存在string2,string3或string4,我最终会得到类似http://abc/def/ghi/string1///.aspx

的内容

我真的很感激你能给我的任何帮助。您不必在答案中使用VBA正则表达式。

2 个答案:

答案 0 :(得分:0)

我只是抓住整个string1:string2:...部分,用斜杠替换冒号,将其放入所需的网址格式,然后附加.aspx。因此,您的主正则表达式只会在?id=之后获取查询字符串:

http://foo/bar/baz.php\?id=(.*)

答案 1 :(得分:0)

这是一个演示如何在没有VBA中的正则表达式的情况下完成它:

Sub replace_url()
Dim s As String, known As String, repl As String, res As String
s = "http://foo/bar/baz.php?id=string1:string2:string3:string4"
known = "http://foo/bar/baz.php?id="
repl = "https://abc/def/ghi/" '$1/$2/$3/$4.aspx

If Left(s, Len(known)) = known Then ' if the string starts with known substring
  Dim chunks() As String
  chunks = Split(Mid(s, Len(known) + 1), ":")
  res = repl & Join(chunks, "/") & ".aspx"
End If

End Sub

这里的要点是我们有一个已知的起始子串http://foo/bar/baz.php?id=。我们检查有问题的字符串是否以它开头,然后获取其余字符串并使用:进行拆分。然后,通过将数组与/连接并附加.aspx来构建结果。