如何使用正则表达式匹配两个标签之间的内容
how to use regular expression to match content between two tags
我试过这个代码
"<h2 class="a-text-normal">.*</h2>"
但它会匹配整个句子,而不仅仅是内容。
<h2 class="a-text-normal">The info to be matched</h2>
您可以使用非贪婪量词和正则表达式环视。
(?<=<h2 class="a-text-normal">).*?(?=</h2>)
代码
NSString *orgStr = @"<h2 class=\"a-text-normal\">The info to be matched</h2>";
NSString *URLRegExPattern = @"(?<=<h2 class=\"a-text-normal\">).*?(?=<\/h2>)";
NSError *regExErr;
NSRegularExpression *URLRegEx = [NSRegularExpression regularExpressionWithPattern:URLRegExPattern
options:0
error:®ExErr];
NSString *URLString = nil;
NSRange range = [URLRegEx rangeOfFirstMatchInString:orgStr
options:0
range:NSMakeRange(0, orgStr.length)];
if (!NSEqualRanges(range, NSMakeRange(NSNotFound, 0))) {
URLString = [orgStr substringWithRange:rangeOfFirstMatch];
}
NSLog(@"URL: %@", URLString);
一个简单的(对于通用语言)正则表达式是:
[^>]+(?=<)
希望对您有所帮助。
编辑:
如果您的语言允许您在正则表达式的开头使用 >\K
或 (?<=>)
,那么搜索时会提高速度。
我试过这个代码
"<h2 class="a-text-normal">.*</h2>"
但它会匹配整个句子,而不仅仅是内容。
<h2 class="a-text-normal">The info to be matched</h2>
您可以使用非贪婪量词和正则表达式环视。
(?<=<h2 class="a-text-normal">).*?(?=</h2>)
代码
NSString *orgStr = @"<h2 class=\"a-text-normal\">The info to be matched</h2>";
NSString *URLRegExPattern = @"(?<=<h2 class=\"a-text-normal\">).*?(?=<\/h2>)";
NSError *regExErr;
NSRegularExpression *URLRegEx = [NSRegularExpression regularExpressionWithPattern:URLRegExPattern
options:0
error:®ExErr];
NSString *URLString = nil;
NSRange range = [URLRegEx rangeOfFirstMatchInString:orgStr
options:0
range:NSMakeRange(0, orgStr.length)];
if (!NSEqualRanges(range, NSMakeRange(NSNotFound, 0))) {
URLString = [orgStr substringWithRange:rangeOfFirstMatch];
}
NSLog(@"URL: %@", URLString);
一个简单的(对于通用语言)正则表达式是:
[^>]+(?=<)
希望对您有所帮助。
编辑:
如果您的语言允许您在正则表达式的开头使用 >\K
或 (?<=>)
,那么搜索时会提高速度。