Content-Type情報でどのように行を抽出できますか?いくつかのメールでは、これらのヘッダーは、送信された方法に応じて2行または3行または4行にすることができます。これは一例です:
Content-Type: text/plain;
charset="us-ascii"
Content-Transfer-Encoding: 7bit
Lorem ipsum dolor sit amet, consectetur adipisicing elit,
sed do eiusmod tempor incididunt ut labore et dolore magna
aliqua. Ut enim ad minim veniam, quis nostrud exercitation
ullamco laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit in voluptate velit
esse cillum dolore eu fugiat nulla pariatur. Excepteur sint
occaecat cupidatat non proident, sunt in culpa qui officia
deserunt mollit anim id est laborum.
私はこの正規表現を試しました: ^(Content - 。* :(。| \ n)*)*
正規表現をJavaでどのように訳すべきですか?
Content-Type: text/plain;
charset="us-ascii"
Content-Transfer-Encoding: 7bit
ヘッダーの正確な定義については、関連するRFCを参照してください。 IIRCは本質的に改行と1つまたは複数の空白文字(スペース、改行禁止スペース、タブなど)をすべて同じヘッダ行の一部として考慮する必要があります。改行と空白を1つの空白要素に畳まなければならないと考えています(もっと複雑な規則があるかもしれないので、RFCをチェックしてください)。
新しい行が空白以外の文字で直接開始される場合のみ、次のヘッダーになります。直後に改行が続くと、ヘッダーセクションが終了し、本文セクションが開始されます。
ところで、車輪を改造するのではなく、JavaMailを使うだけではどうですか?
このテストされたスクリプトは私のために働く:
import java.util.regex.*;
public class TEST
{
public static void main( String[] args )
{
String subjectString =
"Content-Type: text/plain;\r\n" +
" charset=\"us-ascii\"\r\n" +
"Content-Transfer-Encoding: 7bit\r\n" +
"\r\n" +
"Lorem ipsum dolor sit amet, consectetur adipisicing elit,\r\n" +
"sed do eiusmod tempor incididunt ut labore et dolore magna\r\n" +
"aliqua. Ut enim ad minim veniam, quis nostrud exercitation\r\n" +
"ullamco laboris nisi ut aliquip ex ea commodo consequat.\r\n" +
"Duis aute irure dolor in reprehenderit in voluptate velit\r\n" +
"esse cillum dolore eu fugiat nulla pariatur. Excepteur sint\r\n" +
"occaecat cupidatat non proident, sunt in culpa qui officia\r\n" +
"deserunt mollit anim id est laborum.\r\n";
String resultString = null;
Pattern regexPattern = Pattern.compile(
"^Content-Type.*?(?=\\r?\\n\\s*\\n)",
Pattern.DOTALL | Pattern.CASE_INSENSITIVE |
Pattern.UNICODE_CASE | Pattern.MULTILINE);
Matcher regexMatcher = regexPattern.matcher(subjectString);
if (regexMatcher.find()) {
resultString = regexMatcher.group();
}
System.out.println(resultString);
}
}
これは有効な \ r \ n
と(一般的ではあるが一般的ではありませんが)有効なテキストに対して動作します: \ n