2012-05-09 23 views
0

私はNSRegularExpressionsを使用してHTMLページを解析しようとしている。.. ページでは、このHTMLコードの繰り返しです:解析HTML NSRegularExpression

<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> 

ので、i'ldはdiv要素の間の文字列を取得したいです

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

は、だから、私はCで、今、この

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

のように見える正規表現を作りましたode、私はこれを使用して実装します:

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でテストしました。

おかげ

+1

ちょっとしたことhttp://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags – Joe

+0

必須、[正規表現を使ってHTMLを解析する:どうしてですか? "](http://stackoverflow.com/questions/590747/using-regular-expressions-to-parse-html-why-not) –

答えて

1

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

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

正規表現:

fact[0-9].* 

の意味:実際には、任意の数を繰り返し、0から9までの数字が続く任意の文字が続きます回。

([^<]*) 

代わり

(.*) 

2つのdiv要素の間で一致するので、代わりに正規表現貪欲、またはに対処する:

私はまた、使用することをお勧め

(.*?) 

を(?正規表現を非貪欲にするので、最初に</div>に停止します。

+0

編集:最後に\ nを削除して、私はそれを見たことがなかった.. 。 – sergio

+0

ありがとう!ちょうど質問ですが、 ' 246080/8.59'(ここでは '246080/8.59'を手に入れたいのですが? – Abel

+0

あなたは大歓迎です。スパンの場合は、以下を使用してください: '@" ([^ <]*) " – sergio