为什么这个正则表达式与此不匹配?

时间:2012-09-05 22:48:53

标签: java regex

我正在使用以下正则表达式(在java中)从IMDB中某个actor的电影中获取id,tittle和year。

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

(正则表达式中最重要的部分是“performerIn”之后的内容) 我在this页面遇到了麻烦,获得了“星球大战:第三集 - 西斯的复仇(2005)”的称号。它不匹配。发生了什么事?

1 个答案:

答案 0 :(得分:2)

角色-是括号表达式中的特殊字符,表示范围。例如,[A-Z]匹配AZ 字符范围A,{ {1}}和-

因此,如果您想捕获它,就像在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 ^`开头,所有匹配为文字