0

NSRegularExpressionsを使用してHTMLページを解析しようとしています。ページはこのhtmlコードの繰り返しです。

<div class="fact" id="fact66">STRING THAT I WANT</div> <div class="vote">
<a href="index.php?p=detail_fact&fact=106">#106</a> &nbsp; &nbsp; 
<span id="p106">246080 / 8.59  </span> &nbsp; &nbsp;
<span id="f106" class="vote2">
<a href="#" onclick="xajax_voter(106,3); return false;">(+++)</a> 
<a href="#" onclick="xajax_voter(106,2); return false;">(++)</a>  
<a href="#" onclick="xajax_voter(106,1); return false;">(+)</a> 
<a href="#" onclick="xajax_berk(106); return false;">(-)</a></span>
<span id="ve106"></span>
</div>

だから、私はdivの間の文字列を取得したいです

 <div class="fact" id="fact66">STRING THAT I WANT</div>

だから私はこのような正規表現を作りました

<div class="fact" id="fact[0-9].*\">(.*)</div>

今、私のコードでは、これを使用して実装しています:

    NSString *htmlString = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.myurl.com"] encoding:NSASCIIStringEncoding error:nil];
NSRegularExpression* myRegex = [[NSRegularExpression alloc] initWithPattern:@"<div class=\"fact\" id=\"fact[0-9].*\">(.*)</div>\n" options:0 error:nil];
    [myRegex enumerateMatchesInString:htmlString options:0 range:NSMakeRange(0, [htmlString length]) usingBlock:^(NSTextCheckingResult *match, NSMatchingFlags flags, BOOL *stop) {
        NSRange range = [match rangeAtIndex:1];
        NSString *string =[htmlString substringWithRange:range];
        NSLog(string);
    }];

しかし、何も返されません...私はJavaとPHPで正規表現をテストしましたが、うまく機能しています。何が間違っているのでしょうか。

ありがとう

4

1 に答える 1

1

この正規表現を使用してみてください:

 @"<div class=\"fact\" id=\"fact[0-9]*\">([^<]*)</div>"

正規表現:

fact[0-9].*

意味:ファクトの後に0から9までの数字が続き、その後に任意の回数繰り返される任意の文字が続きます。

また、以下を使用することをお勧めします。

([^<]*)

それ以外の

(.*)

正規表現の貪欲に対処するために2つのdivを一致させる、または代わりに:

(.*?)

(?は正規表現を欲張りにしないので、の最初のインスタンスで停止します</div>

于 2012-05-09T18:40:26.783 に答える