2017-02-16 51 views
1

我有以下正則表達式匹配Url的。我想要做的是在URL屬於某個域時讓它不匹配,比方說google.com。正則表達式匹配Url的,除了某個域

我該怎麼做?我一直在閱讀其他問題和正則表達式參考,到目前爲止我可以實現它。我的正則表達式:

^(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

添加負前瞻:'^(HTTPS:\/\ /)((?:WWW \)谷歌\ .COM?!?)([\ DA-ZA-Z? - ] +。([a-zA-Z \。] {2,6})([\/\ w .-] *)* \ /?$' – anubhava

+0

@anubhava感謝您的評論。你粘貼的表達方式不起作用,但現在我知道負面看法,我會尋找它並嘗試使其工作。謝謝 –

+0

提供樣本數據和您的正則表達式語言/工具,以便我們可以進一步挖掘。 – anubhava

回答

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.comgoogle.com領先。

RegEx Demo

1

這應該使用負先行,並且還包括以www開頭的網址替代方案,也不在行的第一個字符:

((http|ftp|https):\/\/|www.)(?!google|www.google)[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?