Анализ твитов на #хэштеги и @usernames с использованием iOS для нескольких языков

Я хочу преобразовать твит для отображения в UIWebView. Я хочу преобразовать #hashtags и @usernames в html-ссылки, которые я затем обработаю.

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

Кто-нибудь знает подходящий способ сделать это в Objective-C? Можно ли это сделать с помощью регулярных выражений, которые доступны в iOS 4 и более поздние версии? Или мне нужно напугать парсер?

Ах да, забыл упомянуть, я хочу, чтобы это работало для всех языков. (арабский, китайский, немецкий и т.д.)


person Aran Mulholland    schedule 26.02.2011    source источник
comment
Арх, ха-ха, мне нужно решение Objective-c, я нашел это решение javascript, но я не использую UIWebView/: хотя преобразование RegEx в ObjC не должно быть слишком сложным :) Изменены теги вопросов, чтобы другие не находили ложный результат, например Я сделал!   -  person Albert Renshaw    schedule 20.10.2014


Ответы (1)


Если вы делаете это в веб-просмотре, почему бы вам не использовать javascript? Я сделал это в проекте, где ссылки должны были быть найдены автоматически. Я не мог зависеть от детектора данных веб-просмотра, поэтому помог короткий javascript:

someTweet.replace(
   /(\b(https?):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig,
   "<a href='$1'>$1</a>"
)

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

имена пользователей состоят из символов, цифр и _, поэтому им будет соответствовать @([1-9a-zA-Z_]+).

someTweet.replace(
   /@([1-9a-zA-Z_]+)/,
   "<a href='http://twitter.com/$1'>@$1</a>")
)

хэштеги, я не уверен в этом: я предполагаю, что это все, что начинается с # и заканчивается пробелом, # или @, но это только предположение. #([^\s#@]*) может работать.

someTweet.replace(
   /#([^\s#@]*)/,
   "<a href='http://twitter.com/search?q=%23$1'>#$1</a>"
)
person Nick Weaver    schedule 26.02.2011