0

可能重复:
解析 HTML NSRegularExpression

我有一个这样的 NSString:

NSString *string = @"<a href='http://john.com'>JOHN</a> http://john.com";

我想使用正则表达式来解析不在锚标记中的 URL,因此我可以将它们放在锚标记中。

我目前有这个:

NSRegularExpression *URLRegex = [NSRegularExpression
                                 regularExpressionWithPattern:@"((https?):\\/\\/[-A-Z0-9+&@#\\/%?=~_|!:,.;]*[-A-Z0-9+&@#\\/%=~_|])" options:NSRegularExpressionCaseInsensitive error:nil];

这确实检测到了 URL,但它也检测到了锚标记中的 URL,这是有问题的。

有谁知道我需要做什么?谢谢。

更新:

@"([^\'](https?):\\/\\/[-A-Z0-9+&@#\\/%?=~_|!:,.;]*[-A-Z0-9+&@#\\/%=~_|][^\'])"

下面由 Alex 提供的这种模式是一种改进。但是如果我有这样的字符串 @" http://example.com ; john.com"; - example.com 匹配。我怎样才能排除它?基本上我不希望匹配锚标记中的任何内容。

4

1 回答 1

0

一般来说,考虑到正则表达式的工作原理,试图捕捉“不是”的东西比试图捕捉东西要困难得多。您可以使用一些 sed 命令或 strip 的实现等轻松实现上述内容。

鉴于您上面的格式,这样的东西会起作用,还是会为您排除太多的极端情况?

"([^\'](https?):\\/\\/[-A-Z0-9+&@#\\/%?=~_|!:,.;]*[-A-Z0-9+&@#\\/%=~_|][^\'])"

即,我们希望确保您的 URL 不在引号内。它会在以下方面失败:

"tom went to 'https://www.google.com' to find the..."

但我不知道这对你是否重要。

于 2013-01-13T19:41:20.107 回答