Mam następujące wyrażenie regularne, które pasuje do adresu URL. To, co chcę zrobić, to nie pasuje, gdy adres URL należy do określonej domeny, powiedzmy Google.com.

Jak mogę to zrobić? Czytałem inne pytania i regularne referencje wyrażeń i do tej pory mogłem to osiągnąć. Moje regularne wyrażenie:

^(https?:\/\/)?([\da-zA-Z\.-]+)\.([a-zA-Z\.]{2,6})([\/\w \.-]*)*\/?$

Używam tego do filtrowania wiadomości na czacie, używam C #, aby to zrobić. Oto narzędzie, na wypadek, gdybyś chcesz kopać dalej: http://regexr.com/3faji

Metoda rozszerzenia 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;

    }
}

Dzięki za wszelką pomoc

1
André Luiz 16 luty 2017, 20:31

2 odpowiedzi

Najlepsza odpowiedź

Możesz użyć negatywnego spojrzenia w regex, aby uniknąć dopasowania niektórych domen:

^(https?:\/\/)?(?!(?:www\.)?google\.com)([\da-zA-Z.-]+)\.([a‌​-zA-Z\.]{2,6})([\/\w .-]*)*\/?$

Albo:

^(https?:\/\/)?(?!.*google\.com)([\da-zA-Z.-]+)\.([a‌​-zA-Z\.]{2,6})([\/\w .-]*)*\/?$

(?!(?:www\.)?google\.com) jest negatywnym lookhead, który zapewni niepowodzenie, gdy mamy przed sobą www.google.com lub google.com.

RegEx Demo

2
anubhava 16 luty 2017, 18:10

Powinno to działać za pomocą negatywnego wyglądu, a także obejmuje adresy URL, które zaczynają się od WWW zamiast protokołu, a także nie są pierwszym znakiem linii:

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