2013-10-18 1 views
0

URL에서 제목을 가져 오는 방법이 있습니다.url의 NSRegularExpression IOS

작동하지만 하나의 웹 사이트에서 일치하는 결과가 없습니다.

어디에서 문제가 있습니까? 웹 페이지에

는 테스트에 제목입니다 - SDS

NSURL *url_s = [NSURL URLWithString:url]; 
      NSData* data = [NSData dataWithContentsOfURL:url_s]; 

      if(data!=nil){ 
       NSString* newStr = [NSString stringWithUTF8String:[data bytes]]; 
       NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"<title>(.*)</title>" options:0 error:NULL]; 

       NSTextCheckingResult *match = [regex firstMatchInString:newStr options:0 range:NSMakeRange(0, [newStr length])]; 

       NSString *title = [newStr substringWithRange:[match rangeAtIndex:1]]; 
} 
+0

내가 무슨 문제인지 모르겠지만 사람들이 문자를 대문자로 사용하는 HTML을 보았습니다 ... 누군가가 입력 할 수 있습니다. ..... 정규 표현식에서 결과를 반환하지 않습니다. –

+0

'regularExpressionWithPattern : options : error :'의'options' 매개 변수에'0'을 전달하는 대신'NSRegularExpressionCaseInsensitive'를 사용하십시오. 또한,'newStr'는'[NSString stringWithContentsOfURL : encoding : error :]'를 사용하여 할당 할 수 있습니다. HTML을 NSData로 읽은 다음 NSString으로 변환 할 필요가 없습니다. – neilco

+0

안녕하세요, 문제가있는 곳을 찾았지만 좋은 해결책이 필요합니다. 이 제목에 개행 문자가 있습니다 ... – Unmerciful

답변

1

패턴에 대해 HTML을 일치시킬 때 당신은 NSRegularExpressionCaseInsensitiveNSRegularExpressionDotMatchesLineSeparators 옵션을 사용해야합니다.

NSRegularExpressionOptions opts = NSRegularExpressionCaseInsensitive | NSRegularExpressionDotMatchesLineSeparators; 
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"<title>(.*)</title>" 
                     options:opts 
                     error:NULL]; 
1

HTML 또는 XML에서 정규식을 사용하여 콘텐츠를 안전하게 파생시킬 수 없습니다. XML과 HTML은 상태 정보이므로 실제로는 파싱해야합니다. 당신이 선택하고 HTML 파서와 그것을 사용한다

<html> 
<head> 
    <!--<title>Old Title</title>--> 
    <title>New Title</title> 
</head> 
</html> 

예를 들어, 정규 표현식을 사용하여에서 잘못된 결과를 반환합니다. 앱에서 전에 Hpple을 성공적으로 사용했습니다.

+1

+1 Norbert가 [iOS에서 HTML을 분석하는 방법] (http://www.raywenderlich.com/14172/how-to-parse-html-on-ios)을 참조하십시오. Ray Wenderlich의 사이트에서 좋은 소개를 얻었습니다. – Rob

관련 문제