2013-04-20 60 views
1

一些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> 
.... 

使用正則表達式我想才發現,含有細胞「標題1」和「標題2」,在它的第一行。

-(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] 
} 

但是我得到的整個字符串返回 誰能幫助我?

回答

2

在你的模式中替換.*.*?應該做的伎倆,但你應該認真考慮使用一個實際的XML解析器,而不是正則表達式。

+0

我正在從一個更大的XML源恢復並添加?爲這一小段代碼工作,但不適用於更大的一組數據。不過,你對XML解析是正確的,謝謝你讓我直觀。 – 2013-04-20 07:01:56