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开头,例如ftp
、mailto
等。这些域名用于指定不同的协议,而不是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. ,你可以自行决断。你可以使用复杂的正则表达式来实现。
希望这对你有帮助!