0

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

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

(正则表达式中最重要的部分是“performerIn”之后的内容)我在这个页面上遇到了麻烦,以获得标题“星球大战:第三集 - 西斯的复仇(2005)”。它不匹配。怎么了?

4

1 回答 1

2

该字符-是括号表达式中的特殊字符,表示范围。例如,[A-Z]匹配从Ato的字符范围Z而不是字符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^` 开头,所有内容都作为文字匹配。

于 2012-09-05T23:42:23.430 回答