0

需要一些关于这个简单正则表达式的提示。

用于从 <img src="..." /> 中提取 src 的正则表达式和目标字符串代码

NSString *imgTag = @"<img alt=\"\" src=\"/sites/default/files/mypic.gif\" style=\"width: 300px; height: 195px;\" />";

NSRegularExpression *a = [NSRegularExpression regularExpressionWithPattern:@"src=\"(.*)\"" options:NSRegularExpressionCaseInsensitive error:nil];

不确定是否与options

NSTextCheckingResult *matches = [a firstMatchInString:imgTag options:NSMatchingReportProgress range:NSMakeRange(0, [imgTag length])];

NSRange matchRange = [matches range];
NSString *src = [imgTag substringWithRange:matchRange];
NSLog(@"%s, %@", __PRETTY_FUNCTION__, src);

现在输出是出乎意料的,因为它不仅返回组,还返回它之后直到结束标记的所有内容。

输出

/sites/default/files/mypic.gif" style="width: 300px; height: 195px;
4

2 回答 2

2

它基本上匹配从 first"到 last的所有内容"

您可能应该使用非贪婪运算符?,它“匹配 0 次或多次。匹配尽可能少。 ”。
例如:

NSRegularExpression *a = [NSRegularExpression regularExpressionWithPattern:@"src=\"(.*?)\"" options:NSRegularExpressionCaseInsensitive error:nil];
于 2013-03-09T17:02:35.153 回答
1

您的正则表达式很贪婪。

尝试:

@"src=\"(.*?)\""

为你的表达。

于 2013-03-09T17:00:54.773 回答