2012-09-05 67 views
0

我正在使用以下正則表達式(在java中)從IMDB中某個actor的電影中獲取id,tittle和year。爲什麼這個正則表達式不符合這個?

/title/tt(\\d+)/\"\\s+itemprop=\"performerIn\"\\s*>\\s*(([\\(|\\)|&#\\d+;|\\w|!|/|:|-|.|,| ]+) \\(\\d\\d\\d\\d\\))</a> 

(正則表達式中最重要的部分是什麼是「performerIn」後) 我遇到了麻煩與this頁面拿到冠軍「星戰前傳III - 西斯的復仇(2005) 」。它不匹配。發生什麼事?

+0

你可以將它縮減爲最小的正則表達式和最小輸入字符串,它們共同證明了這個問題? – TimK

+0

請向我們展示您嘗試匹配的示例字符串。順便說一句,從來沒有用正則表達式解析HTML。 – Bergi

+0

顯示你如何使用正則表達式。 ('Pattern.compile'或其他)。 –

回答

2

字符-是托架的表達,這表示範圍內的特殊字符。例如,[A-Z]字符從AZ的範圍內,字符A-,和Z匹配。

因此,如果你想捕捉它,因爲在Episode III - Escape of the Sith,您需要使用\\-逃吧:

/title/tt(\\d+)/\"\\s+itemprop=\"performerIn\"\\s*>\\s*(([\\(|\\)|&#\\d+;|\\w|!|/|:|\\-|.|,| ]+) \\(\\d\\d\\d\\d\\))</a> 

此外,使用支架時的表情,你並不需要使用管道( |)。這是括號表達式的全部要點。因此,而不是使用[,|:| ]匹配,:,和一個空白,使用[,: ] instead. [,|:| ] will match all those characters **AND** the pipe character itself, since inside a bracket expression, with the exception of - and ^`開頭,一切匹配爲文字

相關問題