Парсинг твитов для #hashtags и @usernames с использованием iOS для нескольких языков - PullRequest
0 голосов
/ 26 февраля 2011

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

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

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

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

1 Ответ

2 голосов
/ 26 февраля 2011

Если вы делаете это в веб-обозрении, почему бы вам не пойти дальше и не использовать 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>"
)
...