Ios 正则表达式非常适用于hashtags和@usernames,但不适用于URL';s
我有一个正则表达式,我已经用了一段时间,当用户在键入文本时,它用来突出显示标签(例如Ios 正则表达式非常适用于hashtags和@usernames,但不适用于URL';s,ios,objective-c,regex,Ios,Objective C,Regex,我有一个正则表达式,我已经用了一段时间,当用户在键入文本时,它用来突出显示标签(例如#stackoverflow)或用户名/名称(例如@jeffjohnson) 下面是我创建正则表达式的方法: NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(#|@)(\\w+)|(#|@)" options:0 error:&error]; 我想添加到这个正则表达式模式中,这样它也会突出
#stackoverflow
)或用户名/名称(例如@jeffjohnson
)
下面是我创建正则表达式的方法:
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(#|@)(\\w+)|(#|@)" options:0 error:&error];
我想添加到这个正则表达式模式中,这样它也会突出显示一个URL。因此,我将其更改为以下模式:@“(http)(\\w+)(http)
当他们键入http
时,它会正确工作,但当他们键入冒号(:
)时,冒号不会突出显示
如果我尝试将www
添加到regex模式中,就像添加http
一样,同样的事情也会发生www
将正确高亮显示,但只要键入句点(
),句点将不会高亮显示
如何将完整URL检测添加到此正则表达式模式?这是因为正则表达式正在查找(英文):紧跟字符类\w(计算结果为[A-zA-Z0-9)的哈希、At符号或http这是一个字符类,允许任何大小写字母、任何数字以及下划线。)这就是你的问题所在,如果你想突出显示URL、哈希标记和用户名/提及,我建议使用如下正则表达式:
((?:#|@)\w+|http\S+)
如果您愿意,您可以在正则表达式中获得所需的复杂度,但这在大多数情况下都可以
在英语中,此正则表达式正在寻找:哈希或at符号后跟字符类\w,或http后跟一个或多个非空格字符。使用此正则表达式,我没有测试过它,但我确信它几乎是正确的。您可能需要在其中修改一点,否则我认为它应该可以工作
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(#|@|((http|https)[:][/][/](w{3}[.])?([a-z]+[.])+([a-z]+[/]*)))" options:0 error:&error];
它也将接受类似于此URL的URL
http://stackoverflow.com/questions/32211615/regex-works-perfectly-for-hashtags-and-usernames-but-not-for-urls/32212039#32212039
当然还有一个简单的
http://google.com
对于URL,您不应该尝试使用自己的正则表达式。 URL的格式非常松散。 W3C确实在RFC中提供了一个标准的引用正则表达式(我忘了是哪一个)
在这种情况下,您应该使用内置的NSDataDetector类,它已经为您完成了查找它所调用的链接的工作 句号和冒号不包括在模式中。“它们究竟为什么会被突出显示?”乔什·卡斯韦尔请看我的编辑。