我想转换一条推文,以便在UIWebView中显示。我想将#hashtags和@usernames转换为html链接,然后我将处理它。
我找到了一些使用正则表达式的解决方案,但大多数似乎都有问题,因为电子邮件地址和网络链接中可能包含“@”字符。
有没有人知道在Objective-C中执行此操作的适当方法?是否可以使用iOS 4 and later中提供的正则表达式来完成?或者我需要使用解析器来获得时髦吗?
哦,是的,忘记提及,我希望这适用于所有语言。 (阿拉伯语,中文,德语等...)
答案 0 :(得分:2)
如果您在网页浏览中这样做,为什么不继续使用javascript?我在一个项目中完成了这项工作,必须自动找到链接。我无法依赖webview的数据检测器,因此简短的javascript帮助:
someTweet.replace(
/(\b(https?):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig,
"<a href='$1'>$1</a>"
)
正则表达式很简单,可能无法捕获每个网址,但大部分时间都是如此。将其转移到用户名和主题标签应该不会太困难。
用户名由字符,数字和_组成,因此@([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>"
)