URL匹配的正则表达式在iOS中不起作用

时间:2015-05-22 10:44:48

标签: ios regex xcode

我发现了一个用于检测Web URL的PHP​​正则表达式:

$url_pattern = '/((http|https)\:\/\/)?[a-zA-Z0-9\.\/\?\:@\-_=#]+\.([a-zA-Z0-9\.\/\?\:@\-_=#])*/';

此正则表达式可以匹配以下网址:

http://www.google.com
www.google.com
google.com

现在,我尝试在 Objective-C 中使用它:

NSString * expression = @"/((http|https)\:\/\/)?[a-zA-Z0-9\.\/\?\:@\-_=#]+\.([a-zA-Z0-9\.\/\?\:@\-_=#])*/";
NSRegularExpression * regularExp = [NSRegularExpression regularExpressionWithPattern:expression options:NSRegularExpressionCaseInsensitive error:nil];
NSInteger numberOfMatches = [regularExp numberOfMatchesInString:@"www.google.com" options:0 range:NSMakeRange(0, URLString.length)];

if (numberOfMatches >= 1)
{
    return @"webURL";
}
else
{
    return @"searchEngine";
} 

它没有检测到任何类型的URL。我在regexr.com进行了测试。

3 个答案:

答案 0 :(得分:0)

检查一下:

NSString urlRegEx = @“(http | https)://((\ w) |([0-9] )|([ - | _]))+(\ | /)+“;

我在我的应用中使用这个

答案 1 :(得分:0)

请尝试使用以下代码验证网址

- (BOOL) validateUrl: (NSString *) stringURL {
    NSString *urlRegEx =
    @"(http|https)://((\\w)*|([0-9]*)|([-|_])*)+([\\.|/]((\\w)*|([0-9]*)|([-|_])*))+";
    NSPredicate *urlTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", urlRegEx]; 
    return [urlTest evaluateWithObject:stringURL];
}

答案 2 :(得分:0)

您应该记住,PHP正则表达式通常在目标C中使用此类正则表达式模式时应删除的分隔符中使用。此外,我们不必转义字符类中的每个非单词字符(仅限于连字符),但在字符类之外,必须双重转义特殊字符。

所以,使用

NSString *pattern = @"(?:(?:http|https)://)?[a-zA-Z0-9./?:@\\-_=#]+\\.([a-zA-Z0-9./?:@\\-_=#])*";

或者,你甚至可以签约

NSString *pattern = @"(?:(?:http|https)://)?[\\w./?:@=#-]+\\.([\\w./?:@=#-])*";

查看字符类末尾的连字符不需要转义。

请参阅CodingGround demo