正则expression式获取一个URL Excel的VB的域名

我有一个types为http://test.example.com/anything的url的excel文件…

我想使它http://test.example.com

有人知道我应该使用的正则expression式吗? (我得到了一个macros的VBreplace,我只需要正则expression式)

谢谢

Public Function SearchNReplace1(Pattern1 As String, _ Pattern2 As String, Replacestring As String, _ TestString As String) Dim reg As New RegExp reg.IgnoreCase = True reg.MultiLine = False reg.Pattern = Pattern1 If reg.Test(TestString) Then reg.Pattern = Pattern2 SearchNReplace1 = reg.Replace(TestString, Replacestring) Else SearchNReplace1 = TestString End If End Function 

从: ([az]+://[a-z0-9.-]+)[^ ]*到: \1

这会在域名后面吃东西,直到遇到空格或者string的结尾。 请给予更多的细节,如果这不适合你。

如果你需要ipv6地址作为主机,你必须允许[]:字符:

from: ([az]+://[a-z0-9.\[\]:-]+)[^ ]* to: \1

RFC-3986附录B为我们提供了分解通用URI的正则expression式:

 ^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))? 

既然你有兴趣把所有东西都拉出来,那么下面是一个等价的正则expression式,它应该能很好地工作(在PHP语法中允许注释):

 $re = '%# Match URI and capture scheme and path in $1. ^ # Anchor to beginning of string. ( # $1: Everything up to path. (?: [^:/?#]+:)? # Optional scheme. (?://[^/?#]* )? # Optional authority. ) # End $1: Everything up to path. [^?#]* # Required path. (?:\? [^#]* )? # Optional query. (?:\# .* )? # Optional fragment. $ # Anchor to end of string. %x'; 

这里是完全相同的正则expression式,简而言之,应该在VB中工作:

 myRegExp.Pattern = "^((?:[^:/?#]+:)?(?://[^/?#]*)?)[^?#]*(?:\?[^#]*)?(?:#.*)?$" 

这个正则expression式并不validationURI,它只是将它分解成不同的组件,并把你需要的部分抽出到捕获组1中。注意除了path以外的每个组件都是可选的(path本身可能是空的)。 换句话说,一个空string是一个有效的URI!