2011-09-09 60 views
1

我正在做的應用程序,依賴於html.i代碼中傳遞的HTML文件,所有的數據都顯示在控制檯,但我的問題是如何通過使用正則表達式匹配字符串我不給所有數據的HTML是大 這是值是在控制檯上打印如何通過正則表達式匹配字符串值?

www.ryanair.com" title="Home">Home</a> | <a href="http://www.ryanair.com/site/EN/faqs.php" title="F.A.Q." target="_blank">F.A.Q.</a> | <a href="http://www.ryanair.com/site/EN/conditions.php?view=privacy" title="Privacy Policy" target="_blank">Privacy Policy</a> | <a href="http://www.ryanair.com/site/EN/conditions.php" title="General Terms &amp; Conditions of Carriage" target="_blank">General Terms &amp; Conditions of Carriage</a> | <a href="http://www.ryanair.com/en/terms-and-conditions/copywrite" title="Terms of Use" target="_blank">Terms of Use</a> | <a href="http://www.ryanair.com/site/EN/faqs.php?sect=CONTACT&amp;div=int_sup" title="Contact Us" target="_blank">Contact Us</a> | <a href="javascript:infoWin('trvfee',0,0,'EN');" title="Fees">Fees</a></div><div id="copyr">Copyright 2009 Ryanair Ltd.</div><input type="hidden" id="language" value=""><input type="hidden" id="culture" value=""><script type="text/javascript"> xtnv=document; xtsd=(window.location.protocol.indexOf('https:')==0?'https://logs152':'http://logc158'); xtsite=(window.location.hostname.indexOf('www.bookryanair.com')!=-1)?'384235':'385193'; xtn2="3"; xtpage="BookingProcess_IE::Search"; xtdi="1"; </script><script type="text/javascript" src="js/Ryanair/xtcore.js"></script><noscript><img width="1" height="1" alt="" src="http://logc158.xiti.com/hit.xiti?s=384235&amp;s2=3&amp;p=BookingProcess_IE::Search&amp;di=1"></noscript></div></div></div><div class="clr"></div><script language="javascript" type="text/javascript"><!-- 
        var MacsArray = new Array(); 

       var SortedStations = new Array(
      "AAR","ABZ","AGA","AHO","ALC","LEI","AOI","BCN","BRI","EGC","SXF","BZR","BIQ","BLL","BHX","BLQ","BOD","BOH","BTS","BRE","BES","BDS","BRS","BSL","BRQ","CRL","BZG","CAG","CCF","CND","ORK","CUF","LDY","DNR","DSA","DUB","MME","NRN","EMA","EDI","EIN","FAO","FEZ","FSC","HHN","FUE","GDN","GOA","GRO","PIK","GSE","GRX","LPA","GRZ","GNB","LBC","HAU","IBZ","XRY","FKB","KTW","KUN","KIR","KLU","NOC","KGS","KRK","SUF","ACE","LPP","LCA","LRH","LBA","LIL","LIG","LNZ","LPL","LCJ","LGW","LTN","STN","LDE","MST","MAD","AGP","MLA","MAN","RAK","MRS","FMM","BGY","MPL","MJV","NDR","NTE","NCL","NQY","FNI","OSI","RYG","TRF","OUD","PMO","PMI","BVA","MMX","XCR","PMF","PGF","PEG","PSR","PSA","PDV","PIS","OPO","POZ","PRG","PUY","REU","RHO","RIX","RMI","RDZ","CIA","RZE","SZG","SDR","SCQ","SVQ","SNN","VXO","EBU","NYO","VST","SZZ","TMP","TNG","TFS","TLN","TUF","TPS","TRS","TRN","VLC","VLL","TSF","VRN","VOL","WRO","ZAD","ZAZ","RLG","KSD","CSO","SFT","TLL","HUY","RJK","SKG","VCE","VNO","CHQ","CFU","LEJ" 
       ); 

       var Stations = new Array(); 
       Stations["AAR"] = new Station("AAR", "", "Aarhus", true, true, new Array("AGP","RYG","STN")); 
Stations["AGP"] = new Station("AGP", "", "Malaga", true, true, new Array("AAR","BCN","BGY","BHX","BLL","BLQ","BOH","BRE","BRS","BTS","BVA","CRL","CSO","DUB","EDI","EIN","EMA","FMM","GSE","HAU","HHN","IBZ","KRK","LBA","LPL","MAN","MMX","MRS","MST","NRN","NYO","ORK","PIK","PSA","RYG","SCQ","SDR","SNN","STN","SXF","TMP","TRF","VCE","VLC","VLL","VST","WRO","ZAZ")); 
Stations["RYG"] = new Station("RYG", "", "Oslo (Rygge)", true, true, new Array("AAR","AGP","ALC","BCN","BVA","BZR","CIA","CRL","DUB","FAO","FMM","GDN","HHN","KGS","KRK","KUN","LGW","LPL","LRH","MAD","MAN","NCL","NYO","PMI","PMO","POZ","RIX","SKG","STN","SXF","TLL","TMP","VCE","VLC","WRO","XCR","ZAD")); 


i done this for match all string value in code 
- (void)applicationDidFinishLaunching:(UIApplication *)application { 
    [self sendRequest ]; 
    //Extraction of valid mail ids 
    //NSString * searchString = @" [email protected] [email protected] [email protected] [email protected] [email protected] [email protected]"; 
    NSString * searchString = loginstatus; 
    NSString *regexString = @"[a-z0-9_.%][email protected][a-z0-9_.%]+\\.[a-z][a-z][a-z]"; 
    //NSString *regexString = @"Stations\["(.*)"\] = new Station\((.*)\);"; 
    NSArray *matchArray = nil; 
    matchArray = [searchString componentsMatchedByRegex:regexString]; 
    NSLog(@"matchArray: %@", matchArray); 
    // Override point for customization after application launch 
    //NSString* source = @"Test;12;Y"; 
// NSArray* columns = [source componentsSeparatedByRegex:@";\\s*"]; 
// NSLog([columns description]); 
// [window makeKeyAndVisible]; 
} 

懇求有人幫我在這

回答

0
  • 如果是iOS4的+開發,使用NSRegularExpression
  • 如果你需要的目標以前的iOS版本:
    • 您可以嘗試使用NSPredicate,它支持通過MATCHES運算符的ICU RegEx語法。但它只允許你測試字符串是否匹配,並且不能進行替換或者提取匹配的字符串,所以這是非常有限的。
    • 您可以使用第三方庫,例如RegExKit
+0

我通過像這樣傳遞nsurlconnection來獲取整個html頁面NSURLRequest * theRequest;打印數據 - (void)connectionDidFinishLoading:(NSURLConnection *)連接{loginStatus = [[NSString alloc] initWithBytes:[webData mutableBytes] length:[webData length] encoding:NSUTF8StringEncoding];的NSLog(@ 「%@」,loginStatus); [連接釋放]; }我在loginstatus打印html頁面我想要火正則表達式serach字符串它可能 – Rocky

1

使用NSPredicate反對正則表達式匹配的字符串。

NSString *searchString = @"loginStatus"; 
NSString *regexString = @"[a-z0-9_.%][email protected][a-z0-9_.%]+\\.[a-z][a-z][a-z]"; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self matches %@", regexString]; 
BOOL isStringValid = [predicate evaluateWithObject:searchString]; 
+1

我通過像這樣傳遞nsurlconnection得到整個html頁面NSURLRequest * theRequest;打印數據 - (無效)connectionDidFinishLoading:(NSURLConnection的*)連接 { \t loginStatus = [[NSString的頁頭] initWithBytes:[WEBDATA mutableBytes]長度:[WEBDATA長度]編碼:NSUTF8StringEncoding]; \t NSLog(@「%@」,loginStatus); \t \t \t [連接釋放]; \t } 我在loginstatus打印html頁面,我想火檢索算法字符串的正則表達式就這可能 – Rocky

+0

我認爲你必須對HTML寫入字符串格式。而不是火什麼都想要的搜索字符串的正則表達式。我希望如此。我只是有想法我認爲@empty Stack可以幫助您 – Harish

+0

'NSPredicate'內的正則表達式必須匹配整個字符串。將'。*'添加到模式的開始和結尾。 –

0

如果您嘗試使用正則表達式來解析HTML,您可能會以錯誤的方式解決這個問題。已經有專門的解析器用於此目的,比如NSXMLParser,在您的應用程序中使用NSXMLParser比重新編寫輪盤編寫正則表達式以從HTML中獲取數據更容易。

+0

除非HTML不正確XHTML - 這很不幸很常見 - 使HTML DOM解析無效(例如HTML中的「
」標籤而不是「
」等)。在這種情況下,無法使用XML解析器執行HTML解析。 – AliSoftware

+0

@Abizem很好的答案,直到執行時間格式不正確的HTML是目標。或者文件大小是2.5MB,DOM是8MB。這可能是我想要的只是卸載URL或META REFRESH路徑。 XPath語法錯綜複雜,編寫NSXMLParser的委託非常重要。當我想要整個內容時我使用了NSXMLParser,並且當我需要一小部分時也使用RE。 – zaph

+0

我同意'NSXMLParser'比正則表達式更好,但有時候'NSXMLParser'不會削減它(由於格式錯誤的HTML)。我對HTML進行解析的首選順序是: 1.'NSXMLParser' 2. libxml 3.使用'evaluateJavascript:'方法傳遞數據的'UIWebView'中的Javascript 4.'用您自己的角色'解析字符串方法。 –

相關問題