0

"<p class=a> ... </p>" where...が異なるテキストの複数のオカレンスを含む文字列があります。

正規表現パターンを使用し"<p class=a>(.*)</p>"て、テキストをチャンクに分割しています。しかし、これは機能していません。これの正しい正規表現は何でしょうか?

PS同じ正規表現パターンがNSRegularExpressionを使用してiOSで機能していますが、Patternを使用してAndroidでは機能していません。

私の問題をもっと説明するために:私は次のことをしています

Pattern regex3 = Pattern.compile("(?s)<P Class=ENCC>(.*?)</P>", CASE_INSENSITIVE);
String[] result = p.split(str); 

結果の配列には1つの項目のみが含まれ、それは文字列全体です

以下は私が読んでいるファイルの一部です:

<BODY>
    <SYNC Start=200>
      <P Class=ENCC><i>Cerita, Watak, Adegan dalam</i><br/><i>Drama Ini Rekaan Semata-Mata.</i></P>
    </SYNC>
    <SYNC Start=2440>
      <P Class=ENCC>&nbsp;</P>
    </SYNC>
    <SYNC Start=2560>
      <P Class=ENCC><i>Kami Tidak Berniat</i><br/><i>Melukakan Hati Sesiapa.</i></P>
    </SYNC>
    <SYNC Start=4560>
      <P Class=ENCC>&nbsp;</P>
    </SYNC>
    <SYNC Start=66160>
      <P Class=ENCC>Hai kawan-kawan.<br/>Inilah bandaraya Banting.</P>
    </SYNC>

アップデート ::::

みなさん、こんにちは。問題が発生しました。問題は、実際には私が読んでいたファイルのエンコーディングにありました。ファイルはUTF-16(リトルエンディアン)でエンコードされていました。それは正規表現が機能しないというすべての問題を引き起こしていました。私はそれをUTF-8に変更し、すべてが機能し始めました..皆さんのサポートに感謝します。

4

4 に答える 4

2

正規表現を使用して HTML を解析することは、あまり良い考えではありません (理由はこちら)。thisなどの HTML パーサーで使用する必要があるもの。

そうは言っても、あなたの問題はおそらく*オペレーターが貪欲であるという事実です。あなたの質問では、それが機能していないと言っているだけなので、最初<p class=a>と最後の</p>. 次のように、正規表現を貪欲にしないようにします: (演算子を貪欲にしないため<p class=a>(.*?)</p>の余分な点に注意してください) は、問題を解決するはずです (あなたの問題が私が前に述べたものであると仮定します)。?*

そうは言っても、正規表現のアプローチをやめて、適切な HTML パーサーを使用することを強くお勧めします。

于 2012-06-26T09:04:05.553 に答える
1

編集:

コードと照合対象のテキストを投稿したので、すぐに 1 つのことが頭に浮かびます。

一致<p class...していますが、文字列には が含まれています<P Class...。正規表現は大文字と小文字が区別されます。

次に、.改行に一致しません。また、段落に改行が含まれている可能性は非常に高いです。

したがって、試してみてください"(?si)<p class=a>(.*?)</p>"(?s)修飾子により、ドットが改行にも一致するようになり、修飾(?i)子により、正規表現で大文字と小文字が区別されなくなります。

于 2012-06-26T09:20:34.513 に答える
0

問題は、あなたのパターンが貪欲であることだと思います。代わりにこれを使用する必要があります。

"<p class=a>(.*?)</p>"

この文字列がある場合:

"<p class=a>fist</p><p class=a>second</p>"

あなたのパターン ( "<p class=a>(.*)</p>") はこれと一致します

"<p class=a>fist</p><p class=a>second</p>"

"<p class=a>(.*?)</p>"マッチのみながら

"<p class=a>fist</p>"
于 2012-06-26T09:01:52.237 に答える
0

. *は<と一致する場合があります。あなたが試すことができます :

<p class=a>([^<]*)</p>
于 2012-06-26T09:05:53.167 に答える