0

次の正規表現(Java)を使用して、IMDBの特定の俳優の映画からID、タイトル、年を取得しています。

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

(正規表現の最も重要な部分は、「performerIn」の後にあるものです)「スターウォーズエピソードIII-シスの復讐(2005)」というタイトルを取得するために、このページで問題が発生しました。一致しません。何が起こっている?

4

1 に答える 1

2

この文字-は、範囲を表すブラケット式内の特殊文字です。たとえば、文字、、およびではなく、 からまでの文字の範囲に一致します。[A-Z]AZA-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 ofand

于 2012-09-05T23:42:23.430 に答える