我正在使用以下正则表达式(在java中)从IMDB中某个actor的电影中获取id,tittle和year。
/title/tt(\\d+)/\"\\s+itemprop=\"performerIn\"\\s*>\\s*(([\\(|\\)|&#\\d+;|\\w|!|/|:|-|.|,| ]+) \\(\\d\\d\\d\\d\\))</a>
(正则表达式中最重要的部分是“performerIn”之后的内容) 我在this页面遇到了麻烦,获得了“星球大战:第三集 - 西斯的复仇(2005)”的称号。它不匹配。发生了什么事?
答案 0 :(得分:2)
角色-
是括号表达式中的特殊字符,表示范围。例如,[A-Z]
匹配A
到Z
, 不 字符范围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
^`开头,所有匹配为文字。