C#,正则表达式 替换/完善 域名/url 为 “ http:// ”开头

  • 1. 规范域名
  • 2. 不规范域名
  • 3. 非http开头域名


1. 规范域名

如果你想使用正则表达式 替换完善 域名。你可以使用 “Regex.Replace()” 方法。例如:

var url = "https://oss.cn/questions/27703"; 

url = Regex.Replace(url, "^http(s)?", "http://");

Console.WriteLine("输出结果:" + url); //输出结果:http://oss.cn/questions/27703

在这里例子中,正则表达式 "^http(s)?" 用来匹配URL中以 “http” 或 “https” 开头的,并将其替换为 “http://”。

请注意,在这里例子中,正则表达式匹配的是整个字符串,而不仅仅是域名部分

如果你只想匹配域名,你可以使用复杂的正则表达式来实现。

弊端:当出现不完整的域名,例如“ :/oss.cn/…”,此方法不行。解决方案请继续往下看。



2. 不规范域名

接下来咱再看看不规则 URL ,例如调用方传给我们的参数,就不是一个完整的、不可访问的域名。
你可以使用 string.TrimStart() 方法用来从字符串的开头删除指定的字符,例如,如果要删除一个URL中开头的冒号和斜杠,可以使用以下代码:

var url = "://oss.cn/questions/27703"; 

url = url.TrimStart(':', '/');

Console.WriteLine("输出结果:" + url); //输出结果:oss.cn/questions/27703

在这里例子中,string.TrimStart() 方法会删除 URL 中的冒号和斜杠,并返回一个新字符串。

除了开头的替换方法之外,还有结尾方法替换,有兴趣可以搜搜,这里就不详细说了。

当我们出现了类似情况,也要将域名替换或完善为 “http”开头的,可以两者结合,请看代码例子:

var url = "/oss.cn/questions/27703"; 

//先替换空,将开头的冒号斜杠删除,在加上 “http://” 头缀
url = "http://"  + (Regex.Replace(url, "^http(s)?", "").TrimStart(':', '/'));

Console.WriteLine("输出结果:" + url);  //输出结果:http://oss.cn/questions/27703



3. 非http开头域名

有些域名可能不以http开头,例如ftpmailto等。这些域名用于指定不同的协议,而不是http协议。
我们替换他们的时候,可以有更多的正则表达式,例如:

var url = "www.oss.cn/questions/27703"; 

//输出结果:http://www.oss.cn/questions/27703
string url1 = "http://" + Regex.Replace(url, "^http(s)?", "").TrimStart(':', '/');

//输出结果:http://oss.cn/questions/27703
string url2 ="http://" +(Regex.Replace(url, "^(https?://)?(www.)?", "").TrimStart(':','/'));

在这个例子中,使用 “^(https? : //)?(www.)?” 正则表达式,用于匹配一个域名,他会匹配以http或https开头,www可有可无的域名。例如,下面的域名都会被匹配:

http://www.oss.comhttps://oss.comwww.oss.com

Regex.Replace(url, "^(https? : //)?(www.)?", ""),使用正则表达式匹配以http或https开头,www可有可无的域名,将其替换为 “ ”string.Empty,为其重新匹配“https”前缀。

示例中列举了两种,至于你要加全部,还是截取 www. ,你可以自行决断。你可以使用复杂的正则表达式来实现。

希望这对你有帮助!