DOBON.NET DOBON.NETプログラミング掲示板過去ログ

正規表現について

環境/言語:[VB.NET]
分類:[.NET]

VB.NETにてメールの受信処理を行っております。

=?iso-2022-jp?Q?=1B$B%H!<%?%k7o?t=1B(B?=のデータを
=\?([^\?]+)\?([qQbB])\?([^\?]+)\?=という正規表現を使用して処理を行っております。

本来は
グループ1.iso-2022-jp
グループ2.Q
グループ3.=1B$B%H!<%?%k7o?t=1B(B
にグループ化したいのですが、グループ3に"?"が含まれている為、グループ化されません。
ちなみにグループ3には”トータル件数”というデータをセットしております。


正規表現のグループ3の記述が間違っていると予想されるのですが、いろいろ試してみてもうまく取得出来ません。


どなたかご存知ではないでしょうか?
入力としてありうる文字列がよくわからないですし、
私は正規表現に明るくないのでお望みのものと違うかもしれませんが。

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim Pattern As String = "^=\?([^\?]+)\?([qQbB])\?(.+)\?=$"
        Dim Text As String = "=?iso-2022-jp?Q?=1B$B%H!<%?%k7o?t=1B(B?="

        Dim Regex0 As New Regex(Pattern)
        Dim m As Match = Regex0.Match(Text)
        Dim count As Integer = 0

        For Each g As Group In m.Groups
            Console.WriteLine("Group{0} = ""{1}""", count, g.Value.ToString)
            count += 1
        Next
    End Sub
CRTさんご返答ありがとうございました。

ご返答頂いた処理方法で問合せの処理はうまく処理出来ました。

入力としてありうる文字列の記載を致しておりませんでした。失礼致しました。

データ=?iso-2022-jp?Q?=1B$B%H!<%?%k7o?t=1B(B?=には規則があり
1."=?"で始まり"?="で終了する。
2.第一グループは、"=?"で始まり"?"まで
3.第二グループは、"?"で始まり"BbQq"が含まれる"?"まで
4.第三グループは、"?"で始まり"?="まで
です。

今回初めて正規表現を使用する為、本やネットで調べているのですが、第三グループの、"?"で始まり"?="までという処理の"?="で終了する部分までという表現方法が分かりません。

但し、データの取得方法によって
=?iso-2022-jp?Q?=1B$B%H!<%?%k7o?t=1B(B?==?iso-2022-jp?Q?=1B$B%H!<%?%k7o?t=1B(B?=と2回以上のパターンマッチデータが発生し得る為、最終の"?="ではなく第三グループの"?"以降の"?="までのデータを取得したいのです。

現在第三グループのデータを"?"でマッチング後、ネクストマッチにて"?="が到来するまで繰り返し処理い判断をしようかと考えておりますが、処理が複雑な為、可能であれば一度のパターンマッチで処理を行なえないかと考えております。
最短一致は ? を使います。
\?(.+?)\?=
とすれば、
? で始まり
任意の一文字以上の文字列
最も近い ?=
にマッチします。
Hongliangさんありがとうございました。

遅くなり申し訳ございません。

お蔭様で予想通りの結果を得ることが出来ました。


土曜日に一日かけていろいろ試したのですが・・・

DOBON.NET | プログラミング道 | プログラミング掲示板