5

テキストファイルに以下のコンテンツがあります

  some texting content <img  src="cid:part123" alt=""> <b> Test</b>

ファイルから読み取り、文字列、つまりinputStringに保存します

   expectedString = inputString.replaceAll("\\<img.*?cid:part123.*?>",
    "NewContent");

期待される出力が得られます

     some texting content NewContent <b> Test</b>

基本的に、以下のように img と src の間に行末文字がある場合、以下の例のように機能しません

 <img  
          src="cid:part123" alt="">

マッチング中に正規表現が行末文字を無視する方法はありますか?

4

3 に答える 3

10

あなたもdot (.)一致させたい場合は、フラグnewlineを使用できます。Pattern.DOTALLまたは、 の場合は、パターンの先頭にString.replaceAll()a を追加できます(?s)。これは、このフラグと同等です。

Pattern.DOTALL- JavaDocから: -

Dotallモードは、埋め込みフラグ式(?s)を介して有効にすることもできます。( sは「単一行」モードのニーモニックで、Perl ではこれが呼ばれています。)

したがって、次のようにパターンを変更できます。

expectedStr = inputString.replaceAll("(?s)<img.*?cid:part123.*?>", "Content");

注: -をエスケープする必要はありませんangular bracket(<)

于 2012-11-06T10:37:26.853 に答える
2

デフォルトでは、.文字は改行文字と一致しません。Pattern.DOTALLflagを指定することで、この動作を有効にすることができます。では、パターンの前にString.replaceAll()a を付けてこれを行います。(?s)

expectedString = inputString.replaceAll("(?s)\\<img.*?cid:part123.*?>", 
    "NewContent");

String.replaceAll を使用した Pattern.DOTALLも参照してください。

于 2012-11-06T10:37:07.990 に答える
1

モードを使用する必要がありPattern.DOTALLます。

replaceAll()モード フラグを個別の引数として取りませんが、次のように式で有効にすることができます。

expectedString = inputString.replaceAll("(?s)\\<img.*?cid:part123.*?>", ...);

ただし、HTML を正規表現で解析するのは得策ではないことに注意してください。代わりに HTML パーサーを使用することをお勧めします。

于 2012-11-06T10:36:08.757 に答える