0

我想转换一条推文以在 UIWebView 中显示。我想将#hashtags 和@usernames 转换为我将处理的html 链接。

我找到了一些使用正则表达式的解决方案,但大多数似乎都有问题,因为电子邮件地址和 Web 链接中可能包含“@”字符。

有谁知道在 Objective-C 中执行此操作的适当方法?可以使用iOS 4 及更高版本中可用的正则表达式来完成吗?或者我需要用解析器变得时髦吗?

哦,是的,忘了提,我希望这适用于所有语言。(阿拉伯语、汉语、德语等...)

4

1 回答 1

2

如果您在 web 视图中执行此操作,为什么不继续使用 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>")
)

hashtags,我不确定这些:我假设它们是以 # 开头并以空格、# 或 @ 结尾的任何东西,但这只是猜测。#([^\s#@]*) 可能有效。

someTweet.replace(
   /#([^\s#@]*)/,
   "<a href='http://twitter.com/search?q=%23$1'>#$1</a>"
)
于 2011-02-26T19:26:48.167 回答