我有以下与Url匹配的正则表达式。我想要做的是当网址属于某个域时使其不匹配,让我们说google.com。
我该怎么做?我一直在阅读其他问题和正则表达式引用,到目前为止我可以实现它。我的正则表达式:
^(https?:\/\/)?([\da-zA-Z\.-]+)\.([a-zA-Z\.]{2,6})([\/\w \.-]*)*\/?$
我用它来过滤聊天中的消息,我使用C#这样做。这是一个工具,以防你想进一步挖掘:http://regexr.com/3faji
C#扩展方法:
static class String
{
public static string ClearUrl(string text)
{
Regex regx = new Regex(@"^(https?:\/\/)?([\da-zA-Z\.-]+)\.([a-zA-Z\.]{2,6})([\/\w \.-]*)*\/?$",
RegexOptions.IgnoreCase);
string output = regx.Replace(text, "*");
return output;
}
}
感谢您的帮助
答案 0 :(得分:2)
您可以在正则表达式中使用否定前瞻以避免匹配某些域:
^(https?:\/\/)?(?!(?:www\.)?google\.com)([\da-zA-Z.-]+)\.([a-zA-Z\.]{2,6})([\/\w .-]*)*\/?$
否则:
^(https?:\/\/)?(?!.*google\.com)([\da-zA-Z.-]+)\.([a-zA-Z\.]{2,6})([\/\w .-]*)*\/?$
(?!(?:www\.)?google\.com)
是否定前瞻,当我们提前www.google.com
或google.com
时会断言失败。
答案 1 :(得分:1)
这应该使用否定前瞻,并且还包括以www而不是协议开头的URL,也不是行的第一个字符:
((http|ftp|https):\/\/|www.)(?!google|www.google)[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?