我有一个正则表达式,我用了一段时间来突出显示主题标签(例如。#stackoverflow
)或用户名/提及(例如。@jeffjohnson
),同时用户输入文字
以下是我创建该正则表达式的方法:
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(#|@)(\\w+)|(#|@)" options:0 error:&error];
我想添加这个正则表达式模式,以便它也会突出显示一个URL。所以我将其更改为以下模式:@"(#|@|http)(\\w+)|(#|@|http)"
当它们键入http
时,它会正常显示,但是当它们键入冒号(:
)时,冒号不会突出显示。
如果我尝试将www
添加到正则表达式模式中,就像我添加http
一样,同样的事情就会发生。 www
会正确突出显示,但只要您键入句点(.
),该句点就不会突出显示。
如何为此正则表达式模式添加完整的URL检测?
答案 0 :(得分:1)
这是因为你的正则表达式正在寻找(英文):一个哈希符号或一个At符号或者http后面紧跟着字符类\ w(它的结果是[a-zA-Z0-9_],这是一个字符允许任何字母,无论大小写,任何数字,以及下划线的类。)并且其中存在您的问题,如果您想突出显示URL以及哈希标记和用户名/提及,我会推荐这样的正则表达式:< / p>
((?:#|@)\w+|http\S+)
如果你愿意,你可以在正则表达式中获得尽可能复杂的效果,但这对大多数情况都适用。
在英语中,这个正则表达式正在寻找:哈希符号或符号后跟字符类\ w,或者http后跟一个或多个非空格字符。
答案 1 :(得分:1)
对于网址,您不应该尝试使用自己的正则表达式。 URL的格式非常宽松。 W3C确实在RFC中提供了标准的参考正则表达式(我忘记了哪一个)
在这种情况下你应该使用的是内置的NSDataDetector类,它已经完成了你找到它所谓的链接的工作。
答案 2 :(得分:0)
使用这个正则表达式,我还没有测试过,但我确信它几乎是正确的你可能需要在其中修改一下,否则我觉得它应该可行
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(#|@|((http|https)[:][/][/](w{3}[.])?([a-z]+[.])+([a-z]+[/]*)))" options:0 error:&error];
它也会接受此网址
的网址http://stackoverflow.com/questions/32211615/regex-works-perfectly-for-hashtags-and-usernames-but-not-for-urls/32212039#32212039
当然是简单的
http://google.com