2011-10-25 32 views
1

我試圖用正則表達式來解碼一些HTML我從網頁檢索。 我想一些標籤轉化爲鏈接。Android的正則表達式沒有找到匹配

我使用應該做工精細根據我和一些testprograms的代碼,但是當我在我的Android設備上運行它沒有找到任何匹配(其中在它的測試程序)。

我使用的正則表達式如下(記住我編碼在Java中,所以我需要逃避轉義字符以及):

String regularExpression = "<iframe.+?src=\\\\?(\\S+).+?(><\\\\?/iframe>|\\\\?/>)"; 
String replacement = "<a href=$1>Youtube</a>"; 

input.replaceAll(regularExpression, replacement); 

從我可以從這個聚集就應更換所有標記,有一個src屬性與源超鏈接。然而,當我喂下面輸入到它,它什麼都不做吧:

<iframe src=\"http:\/\/www.youtube.com\/embed\/s6b33PTbGxk\" frameborder=\"0\" width=\"500\" height=\"284\"><\/iframe> 

的反應僅僅是完全相同的文字,只能用轉義字符刪除:

<iframe src="http://www.youtube.com/embed/s6b33PTbGxk" frameborder="0" width="500" height="284"></iframe> 

誰能幫我並解釋我做錯了什麼?我昨天才開始學習正則表達式,但我不能爲了我的生活找出爲什麼這不起作用。

+0

強制性鏈接到SO的最史詩答案:http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – CommonsWare

+0

我只會使用這是一個臨時解決方案,直到我們制定出適合我們的格式。 – Lars

+0

儘管如此,'

'仍然不能成立。 :-) – CommonsWare

回答

2

String.replaceAll沒有修改字符串的方法。它不能因爲字符串是immutable。相反,它會返回一個帶有結果的新字符串。您需要將此結果分配給某些內容:

String result = input.replaceAll(regularExpression, replacement); 

另外,不要使用正則表達式來解析HTML。

+0

不能相信我犯了這樣一個愚蠢的錯誤,謝謝你指出了我。 至於爲什麼我使用正則表達式,我無法編寫HTML代碼的人得到一些HTML代碼,它必須在iPhone和Android上工作,它目前適用於iPhone,但由於我正在開發新的Android應用程序,這將是我的臨時解決方案。再次感謝您的幫助。 – Lars

0
String resultString = subjectString.replaceAll("(?=<(iframe)\\s+src\\s*=\\s*(['\"])(.*?)\\2[^>]*>).*?</\\1>", "<a href=$3>Youtube</a>"); 

這應該工作。除了@馬克拜爾斯注意你的正則表達式似乎並不符合你的輸入,即使刪除(雙)反斜槓。