Проблема с Regex.Match против Regex.IsMatch - PullRequest
1 голос
/ 22 октября 2009

Я пытаюсь заменить текст, который содержит URL-адреса, текстом на теги, и я пытаюсь использовать что-то вроде этого, но я просто не понимаю, почему это не работает, может быть, я слишком устал тоже это вижу. Вот мой тест:

    [Test]
    public void Check() {
        string expUrl = @"^(https?://)"
        + @"?(([0-9a-z_!~*'().&=+$%-]+: )?[0-9a-z_!~*'().&=+$%-]+@)?" //user@
        + @"(([0-9]{1,3}\.){3}[0-9]{1,3}" // IP- 199.194.52.184
        + @"|" // allows either IP or domain
        + @"([0-9a-z_!~*'()-]+\.)*" // tertiary domain(s)- www.
        + @"([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]" // second level domain
        + @"(\.[a-z]{2,6})?)" // first level domain- .com or .museum is optional
        + @"(:[0-9]{1,5})?" // port number- :80
        + @"((/?)|" // a slash isn't required if there is no file name
        + @"(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)$"; 

        const string url = "http://www.google.com";

        var b = Regex.IsMatch(url, expUrl);
        Assert.IsTrue(b);

        var text = string.Format("this is a link... {0} end of link", url);
        var resul = Regex.Match(text, expUrl);
        Assert.IsTrue(resul.Success);
    }

Почему переменная url проходит проверку IsMatch, но не проходит проверку соответствия? заранее спасибо.

Ответы [ 3 ]

4 голосов
/ 22 октября 2009

Поскольку вы начали свое регулярное выражение с ^ и закончили с $. Они указывают, что совпадение должно начинаться в начале строки и заканчиваться в конце. Поскольку ваш матч находится посередине, он не был найден.

2 голосов
/ 22 октября 2009

Поскольку ваше регулярное выражение начинается с символа «^», указывающего, что «https» должен идти ПЕРВЫМ, а также символа «$», указывающего, что строка должна заканчиваться последней определенной группой.

если вы удалите ^ и $, оба теста пройдут

1 голос
/ 22 октября 2009

^(https?://)

Вы требуете, чтобы начать с http

Обновить эту строку с

string expUrl = @"^(https?://)"

до

string expUrl = @"(https?://)"

И обновите свою последнюю строку с

+ @"(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)$"; 

до

+ @"(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)"; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...