Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 正则表达式非常适用于hashtags和@usernames,但不适用于URL';s_Ios_Objective C_Regex - Fatal编程技术网

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类,它已经为您完成了查找它所调用的链接的工作

句号和冒号不包括在模式中。“它们究竟为什么会被突出显示?”乔什·卡斯韦尔请看我的编辑。