2011-08-21 5 views
0

Je dois analyser de gros fichiers texte html et extraire des sous-chaînes qui correspondent à un certain modèle. Par exemple:Comment extraire une sous-chaîne qui correspond à un motif?

<span id='report-9429'>Report for May 2009</span> 
A lot of code and text. 
<span id='report-10522'>Report for Apr 2009</span> 
A lot of code and text. 
<span id='report-15212'>Report for Apr 2009</span> 

Où 9429, 10522 et 15212 sont les pièces que je dois obtenir comme un tableau de sous-chaînes. Le fichier contient beaucoup d'entre eux, et j'ai besoin de tous les avoir.

Existe-t-il une fonctionnalité RegExp dans Cocoa? Et à quoi ressemblerait un tel RegExp?

Répondre

3

Vous pouvez utiliser NSRegularExpression (bien que, apparemment, il ne fonctionne pas sur Snow Leo) ou RegexKit.

Votre regex pourrait ressembler à ceci:

<span id='report-(\d+)'>Report for \w+ \d+</span> 

Pour NSRegularExpression, le code pourrait ressembler à ceci:

NSString *pattern = @"<span id='report-(\d+)'>Report for \w+ \d+</span>"; 
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern 
                     options:0 
                     error:nil]; 
[regex enumerateMatchesInString:string 
         options:0 
          range:NSMakeRange(0, [string length]) 
        usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) { 
    NSString *reportId = [string substringWithRange:[result rangeAtIndex:1]]; 
    // Do something with reportId 
}]; 
Questions connexes