de-vraag
  • 質問
  • タグ
  • ユーザー
通知:
報酬:
登録
登録すると、質問に対する返答やコメントが通知されます。
ログイン
すでにアカウントをお持ちの方は、ログインして新しい通知を確認してください。
追加された質問、回答、コメントには報酬があります。
さらに
ソース
編集
 Carven
Carven
質問

コンテンツタイプを抽出する正規表現

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
2 2011-10-28T02:19:54+00:00 5
プログラミング
regex
java
email
email-headers
FailedDev
28日 10月 2011 в 2:33
2011-10-28T02:33:57+00:00
さらに
ソース
編集
#56794273
Pattern regex = Pattern.compile("^Content-Type(?:.|\\s)*?(?=\n\\s+\n)");

これは、最初の完全に空の行までContent-Typeで始まるすべてのものと一致します。

2
0
hllau
28日 10月 2011 в 3:22
2011-10-28T03:22:51+00:00
さらに
ソース
編集
#56794274

^Content-(.|\n)*\n\n This will match until the blank line.

1
0
Narendra Yadala
28日 10月 2011 в 3:26
2011-10-28T03:26:37+00:00
さらに
ソース
編集
#56794275

この正規表現を試すことができます

Pattern regex = Pattern.compile("Content-Type.*?(?=^\\s*\n?\r?$)", 
                                 Pattern.DOTALL | Pattern.MULTILINE);
1
0
Mark Rotteveel
28日 10月 2011 в 7:59
2011-10-28T07:59:06+00:00
さらに
ソース
編集
#56794276

ヘッダーの正確な定義については、関連するRFCを参照してください。 IIRCは本質的に改行と1つまたは複数の空白文字(スペース、改行禁止スペース、タブなど)をすべて同じヘッダ行の一部として考慮する必要があります。改行と空白を1つの空白要素に畳まなければならないと考えています(もっと複雑な規則があるかもしれないので、RFCをチェックしてください)。

新しい行が空白以外の文字で直接開始される場合のみ、次のヘッダーになります。直後に改行が続くと、ヘッダーセクションが終了し、本文セクションが開始されます。

ところで、車輪を改造するのではなく、JavaMailを使うだけではどうですか?

0
0
ridgerunner
28日 10月 2011 в 3:44
2011-10-28T15:44:53+00:00
さらに
ソース
編集
#56794277

このテストされたスクリプトは私のために働く:

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

0
0
質問の追加
カテゴリ
すべて
技術情報
文化・レクリエーション
生活・芸術
科学
プロフェッショナル
事業内容
ユーザー
すべて
新しい
人気
1
Roxana Elizabeth CASTILLO Avalos
登録済み 6日前
2
Hideo Nakagawa
登録済み 1週間前
3
Sergiy Tytarenko
登録済み 1週間前
4
shoxrux azadov
登録済み 1週間前
5
Koreets Koreytsev
登録済み 1週間前
© de-vraag :年
ソース
stackoverflow.com
ライセンス cc by-sa 3.0 帰属