4

これは私がデータを取得したい文字列のフォーマット/例です:

<span style='display:block;margin-bottom:3px;'><a style='margin:4px;color:#B82933;font-size:120%' href='/cartelera/pelicula/18312'>Español  </a></span><br><span style='display:block;margin-bottom:3px;'><a style='margin:4px;color:#FBEBC4;font-size:120%' href='/cartelera/pelicula/18313'>Subtitulada  </a></span><br>          </div>

そして、これは私が使用している正規表現です。

"pelicula/([0-9]*)'>([\\w\\s]*)</a>"

この正規表現をRegexPlanetでテストしたところ、OKであることがわかり、期待どおりの結果が得られました。

group(1) = 18313
group(2) = Subtitulada

しかし、その正規表現をJavaで実装しようとすると、何にも一致しません。コードは次のとおりです。

Pattern pattern = Pattern.compile("pelicula/([0-9]*)'>([\\w\\s]*)</a>");              
            Matcher matcher = pattern.matcher(inputLine);            
            while(matcher.find()){
                    version = matcher.group(2);
                }
            }

どうしたの?正規表現がすでにテストされていて、同じコードでさらにパターンを検索しているが、2つで問題が発生している場合(ここでは1つだけを示しています)。前もって感謝します!

_編集__ _

問題を発見しました...ページのソースコードを確認するとすべてが表示されますが、Javaから使用しようとすると、別のソースコードが取得されます。なんで?このページはあなたの街を尋ねるので、それについての情報を表示することができます。実際に必要な情報にアクセスするための回避策があるかどうかはわかりませんが、それだけです。

4

2 に答える 2

2

あなたの正規表現は正しいですが、\w一致していないようñです。

正規表現をに変更しました

"pelicula/([0-9]*)'>(.*?)</a>"

両方の出現に一致するようです。ここでは、reluctant*?演算子を使用して、最初から最後までの.*すべての文字が一致しないように しました。説明のために。<a><\a>

@Bohemian は、テキストに改行がPattern.DOTALLある場合、フラグも有効にする必要があるかもしれないことを指摘して正しいです。<a>

于 2012-11-16T14:49:46.510 に答える
1

入力が数行を超える場合(つまり、改行文字が含まれている場合)、「ドットが改行に一致する」をオンにする必要があります。

これを行うには2つの方法があります。

正規表現で「ドットが改行に一致する」正規表現スイッチを使用(?s)します。

Pattern pattern = Pattern.compile("(?s)pelicula/([0-9]*)'>([\\w\\s]*)</a>");

またはPattern.DOTALL、呼び出しでフラグを使用しPattern.compile()ます。

Pattern pattern = Pattern.compile("pelicula/([0-9]*)'>([\\w\\s]*)</a>", Pattern.DOTALL);
于 2012-11-16T02:08:26.520 に答える