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

用于URL匹配的正则表达式在iOS中不起作用,ios,regex,xcode,Ios,Regex,Xcode,我找到了一个PHP正则表达式来检测Web URL: $url_pattern = '/((http|https)\:\/\/)?[a-zA-Z0-9\.\/\?\:@\-_=#]+\.([a-zA-Z0-9\.\/\?\:@\-_=#])*/'; 此正则表达式可以匹配如下URL: http://www.google.com www.google.com google.com 现在,我尝试在Objective-C中使用它作为: 它没有检测到任何类型的URL。我在进行了测试。检查此项: NSSt

我找到了一个PHP正则表达式来检测Web URL:

$url_pattern = '/((http|https)\:\/\/)?[a-zA-Z0-9\.\/\?\:@\-_=#]+\.([a-zA-Z0-9\.\/\?\:@\-_=#])*/';
此正则表达式可以匹配如下URL:

http://www.google.com
www.google.com
google.com
现在,我尝试在Objective-C中使用它作为:

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

检查此项:

NSString urlRegEx=@http | https://\w |[0-9]|[-| |[u]+\.|/+


我在我的应用程序中使用了这个

请尝试以下代码以验证URL

- (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];
}

您应该记住,PHP正则表达式通常在分隔符中使用,当在Objective C中使用此类正则表达式模式时,应该删除这些分隔符。此外,我们不必仅以连字符转义字符类内的每个非单词字符,但在字符类外,必须双转义特殊字符

所以,使用

NSString *pattern = @"(?:(?:http|https)://)?[a-zA-Z0-9./?:@\\-_=#]+\\.([a-zA-Z0-9./?:@\\-_=#])*";
或者,你甚至可以签约

NSString *pattern = @"(?:(?:http|https)://)?[\\w./?:@=#-]+\\.([\\w./?:@=#-])*";
请参见字符类末尾的连字符不需要转义


请参见删除分隔符,必要时使用双斜杠。NSString*表达式=@?:?:http | https://?[a-zA-Z0-9./\\\?:@\\-\\\\\\\+\.[a-zA-Z0-9./\\\?:@\\-\\]*;。它甚至可以压缩为NSString*pattern=@?:?:http | https://?[\\w./\\?:@=-]+\.[\\w./\\?:@=-]*;。谢谢你的斯特里比雪夫,它现在正在工作!!!很好,我添加了一个带有工作演示链接的答案。请注意,regex101.com或regexr.com可以为您提供使用regex可以实现的要点,但是您仍然需要根据
NSString *pattern = @"(?:(?:http|https)://)?[\\w./?:@=#-]+\\.([\\w./?:@=#-])*";