Regex - найти все ссылки в твиттере - PullRequest
3 голосов
/ 13 сентября 2009

Мое регулярное выражение бедно и подводит меня, поэтому некоторая помощь была бы здесь полезна.

Все, что я хочу сделать, это вернуть все ссылки, которые появляются в твите (просто строка) - Вот некоторые примеры:

"Great summary http://mytest.com/blog/post.html (#test)

"http://mytest.com/blog/post.html (#test)

"post: http://mytest.com/blog/post.html"

Он также должен поддерживать несколько ссылок, таких как: "read http://mytest.com/blog/post.html and http://mytest.com/blog/post_two.html"

Любая помощь будет отличной!

Спасибо

Ben

Ответы [ 4 ]

2 голосов
/ 13 сентября 2009

Попробуйте это:

/\bhttps?:\/\/\S+\b/

Обновление:

Чтобы ловить ссылки, начинающиеся с "www." тоже (без префикса http://"), вы можете попробовать это:

/\b(?:https?:\/\/|www\.)\S+\b/

1 голос
/ 13 сентября 2009

Нашел этот здесь

^(?#Protocol)(?:(?:ht|f)tp(?:s?)\:\/\/|~/|/)?(?#Username:Password)(?:\w+:\w+@)?(?#Subdomains)(?:(?:[-\w]+\.)+(?#TopLevel Domains)(?:com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum|travel|[a-z]{2}))(?#Port)(?::[\d]{1,5})?(?#Directories)(?:(?:(?:/(?:[-\w~!$+|.,=]|%[a-f\d]{2})+)+|/)+|\?|#)?(?#Query)(?:(?:\?(?:[-\w~!$+|.,*:]|%[a-f\d{2}])+=(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)(?:&(?:[-\w~!$+|.,*:]|%[a-f\d{2}])+=(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)*)*(?#Anchor)(?:#(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)?$ 
1 голос
/ 13 сентября 2009

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

if(tweetStream[i] != null)
                    {
                        var str = tweetStream[i].Text;
                        var re = new Regex(@"http(s)?:\/\/\S+");
                        MatchCollection mc = re.Matches(tweetStream[i].Text);

                        foreach (Match m in mc)
                        {
                            str = str.Replace(m.Value, "<a href='" + m.Value + "' target='_blank'>" + m.Value + "</a>");
                        }
                        re = new Regex(@"(@)(\w+)");
                        mc = re.Matches(tweetStream[i].Text);
                        foreach (Match m in mc)
                        {
                            str = str.Replace(m.Value, "<a href='http://twitter.com/" + m.Value.Replace("@",string.Empty) + "' target='_blank'>" + m.Value + "</a>");
                        }
                        re = new Regex(@"(#)(\w+)");
                        mc = re.Matches(tweetStream[i].Text);
                        foreach (Match m in mc)
                        {
                            str = str.Replace(m.Value, "<a href='http://twitter.com/#search?q=" + m.Value.Replace("#", "%23") + "' target='_blank'>" + m.Value + "</a>");
                        }
                        tweets += string1 + "<div>" + str + "</div>" + string2;
                    }
0 голосов
/ 08 апреля 2011

Я понимаю, что этот вопрос относится к 2009 году, но API Twitter теперь возвращает URL-адреса (и расширяет ссылки t.co).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...