Регулярные выражения в помощь твиттер разработчику
Написал maxt3r | В категорию «Разработка» | 15-07-2009
8
Довелось мне недавно вот такую штуку писать ради развлечения и небольшого профита, которого я, к слову, не получил. Коротко говоря, мои американские друзья из Sawhorse Media решили конкурс устроить. Касаться его я не буду, не об этом хотел написать, скажу лишь, что проиграл, но не по причине хреново написаного приложения (если посмотреть на остальные два, видно, что мое объективно лучшее), а просто потому, что написал я его вторым, меня опередил какой-то бородатый парень.
Так долго (два часа) я возился из-за того, что в мою не всегда адекватную голову пришла мысль сделать красиво и подсветить @юзернеймы, #хештеги и обычные http://ссылки. И никак мысль эта уходить не хотела и пришлось мне у нее на поводу пойти. Как это реализовать сразу понятно: регулярными выражениями (регэксами у простых пацанов это называется), но вот была одна проблема — дело я с ними имел в первый раз (естественно был нулевой, про программирование же статья), поэтому времени эти маленькие ублюдки отняли у меня не мало, синтаксис там тот еще.
Вот я и решил написать все три выражения здесь, чтобы все пользовались. Проверены и работают, инджой!
http://hyperlink: (\shttps?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?)
@username: (^|[^a-z0-9_])@([a-zA-Z0-9_]+)
#hashtag: (^|[^a-z0-9_])\s#([a-z0-9A-Z_]+)
Ну и в конце небольшой кусок кода на C#, чтобы было понятно, как использовать.
Regex hyperlink = new Regex("(\\shttps?://([-\\w\\.]+)+(:\\d+)?(/([\\w/_\\.]*(\\?\\S+)?)?)?)");
content = hyperlink.Replace(content, "<a href='$0'>$0</a>");
Regex username = new Regex("(^|[^a-z0-9_])@([a-z0-9_]+)");
content = username.Replace(content, "$1@<a href='http://twitter.com/$2'>$2</a>");
Regex hashtag = new Regex("(^|[^a-z0-9_])\\s#([a-z0-9A-Z_]+)");
content = hashtag.Replace(content, "$1<a href='http://search.twitter.com/search?q=%23$2'>#$2</a>");

