正则表达式太贪婪;几乎吃掉了我所有的行

标签 regex cocoa nsregularexpression

来自一些 XML 数据:

<Row A1:Height="17" ss:StyleID="s139">
    <Cell ss:StyleID="s69"><Data ss:Type="String">Title1</Data><NamedCell
      ss:Name="Print_Titles"/><NamedCell ss:Name="_FilterDatabase"/><NamedCell
      ss:Name="Print_Area"/></Cell>
    <Cell ss:StyleID="s70"><Data ss:Type="String">Title2</Data><NamedCell
      ss:Name="Print_Titles"/><NamedCell ss:Name="_FilterDatabase"/><NamedCell
      ss:Name="Print_Area"/></Cell>
</Row>

<Row A2:Height="17" ss:StyleID="s139">
    <Cell ss:StyleID="s69"><Data ss:Type="String">Title1</Data><NamedCell
      ss:Name="Print_Titles"/><NamedCell ss:Name="_FilterDatabase"/><NamedCell
      ss:Name="Print_Area"/></Cell>
    <Cell ss:StyleID="s70"><Data ss:Type="String">Title2</Data><NamedCell
      ss:Name="Print_Titles"/><NamedCell ss:Name="_FilterDatabase"/><NamedCell
      ss:Name="Print_Area"/></Cell>
</Row>
....

使用正则表达式,我试图仅查找包含“Title1”和“Title2”单元格的第一行。

-(NSString *)extractDataFromXMLString:(NSString *)xmlString{


NSString *headerPattern =
@" *<Row[^>]*>\n"
@" *<Cell[^>]*>.*Title1.*</Cell>\n"
@" *<Cell[^>]*>.*Title2.*</Cell>\n"
@" *</Row>";

NSError *error = NULL;
NSRegularExpression *headerExpression = [NSRegularExpression 
    regularExpressionWithPattern:headerPattern                                                                      
options:NSRegularExpressionCaseInsensitive|NSRegularExpressionDotMatchesLineSeparators                                                                                  error:&error];


NSRange rangeOfFirstMatch = [headerExpression rangeOfFirstMatchInString:xmlString options:0 range:NSMakeRange(0, [xmlString length])]

return [xmlString substringWithRange:rangeOfFirstMatch]
}

但是我得到了整个字符串返回 谁能帮我吗?

最佳答案

在模式中用 .*? 替换 .* 应该可以解决问题,但您应该认真考虑使用实际的 xml 解析器而不是正则表达式。

关于正则表达式太贪婪;几乎吃掉了我所有的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16115327/

相关文章:

Javascript 等效正则表达式

java - 简单英语的正则表达式

objective-c - Linux 上使用 Cocoa 的 Objective-C 的 Makefile 错误

objective-c - 我如何在 Objective-C 中检查这个奇怪的空格字符 - " "?

ios - NSRegularExpression:如何从NSString中提取匹配的组?

iphone - 向后方向的 NSRegularExpression?

regex - Haskell 正则表达式性能

regex - 如何在词法分析器生成器中有效地实现最长匹配?

macos - Cocoa:获取 "current event"时刻的全局鼠标位置

ios - 检测 UITextView 滚动位置