正则表达式在ios中提取href url并丢弃其余的锚标签?

时间:2014-02-13 19:35:07

标签: html ios regex nsregularexpression

我想在目标C中编写一个url提取函数。输入文本可以是任何内容,可能包含也可能不包含html锚标记。

考虑一下:

NSString* input1 = @"This is cool site <a   href="https://abc.com/coolstuff"> Have fun exploring </a>";
NSString* input2 = @"This is cool site <a target="_blank" href="https://abc.com/coolstuff"> Must visit </a>";
NSString* input3 = @"This is cool site <a href="https://abc.com/coolstuff" target="_blank" > Try now </a>";

我希望修改后的字符串为"This is cool site https://abc.com/coolstuff

忽略锚标记之间的所有文本。并且需要考虑其他属性,例如锚标记中的_target

我可以做类似

的事情
static NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"<a\shref=\"(.*?)\">.*?</a>" options:NSRegularExpressionCaseInsensitive error:nil];;
NSString* modifiedString = [regex stringByReplacingMatchesInString:inputString options:0 range:NSMakeRange(0, [inputString length]) withTemplate:@"$1"];

与input1一起正常工作但在其他情况下失败。

由于

3 个答案:

答案 0 :(得分:9)

试试这个:

<a[^>]+href=\"(.*?)\"[^>]*>.*?</a>

答案 1 :(得分:4)

或试试这个:

<a.+?href="([^"]+)

EXPLAINED

<a - 匹配开始标记

.+? - 懒散地匹配任何内容

href=" - 匹配href属性

([^"]+) - 捕获href值

输出

https://abc.com/coolstuff
https://abc.com/coolstuff
https://abc.com/coolstuff

答案 2 :(得分:0)

string s;
cout <<"enter integer sequence";
cin >> s;
int firstdig, seconddig, thirddig;
firstdig = s[0];
seconddig = s[1];
thirddig = s[2];

cout << thirddig << seconddig << firstdig;

在这里,第一个组($ 1)捕获URL。 $ 2捕获链接文本。