- PR -

VB.NET 2003 の正規表現について

1
投稿者投稿内容
macrosoft
会議室デビュー日: 2008/02/21
投稿数: 3
投稿日時: 2008-02-21 10:42
はじめまして。
SMTPの送信メールの添付ファイル名を正規表現で取得したいのですが、下記2パターンに対応させることで苦戦しております。
取得したいのはfilenameの部分であり、下記のような正規表現でコーディングしたのですが、No2のほうしか取得できません。
No1、No2ともに取得できる正規表現をアドバイスしていただけないでしょうか?
よろしくお願いいたします。

******問題の正規表現*****
"(?<=(^|\r\n)Content-Disposition: attachment;\r\n\tfilename="")(.*\r\n)*(?=""\r\n\r\n)"
******問題の正規表現*****

***No1 添付ファイルが複数あり、ファイル名が一行でおさまる場合*******
Content-Disposition: attachment;
filename="=?iso-2022-jp?B?GyRCJUYlOS="

gqCCoIKggqCCoIKggqCCoIKggqCCoA==

Content-Disposition: attachment;
filename="=?iso-2022-jp?B?GyRCJUYXYZ?="

bbbbbbbb
********************************************************************

***No2 添付ファイルが複数あり、ファイル名が一行でおさまらない場合***
Content-Disposition: attachment;
filename="=?iso-2022-jp?B?GyRCIzEjMi=?=
=?iso-2022-jp?B?MRsoQi50eH=?="


Content-Disposition: attachment;
filename="=?iso-2022-jp?B?GyRCIzEjMi=?=
=?iso-2022-jp?B?MRsoQi50eH=?="


********************************************************************

--------------------------------------------------------------------
No1の期待値は
=?iso-2022-jp?B?GyRCJUYlOS=

=?iso-2022-jp?B?GyRCJUYXYZ?=
です。

No2の期待値は
=?iso-2022-jp?B?GyRCIzEjMi=?=
=?iso-2022-jp?B?MRsoQi50eH=?=

=?iso-2022-jp?B?GyRCIzEjMi=?=
=?iso-2022-jp?B?MRsoQi50eH=?=
です。
--------------------------------------------------------------------
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2008-02-21 12:21
正規表現にはあまり詳しくないですし、もっといい方法もあるかもしれませんが、

  1. 元の文字列が「Content-Disposition: attachment;\\r\\n\\tfilename="〜"」であるかどうかをチェックする。
  2. 元の文字列から、filename="〜"の 〜 の部分を取り出す。
  3. 取り出した文字列を、改行で分ける(あるいはStringReaderで1行1行取り出せるようにする?)

こんな感じで処理を分けるのはいかがでしょうか。
indigo-x
大ベテラン
会議室デビュー日: 2008/02/21
投稿数: 207
お住まい・勤務地: 太陽の塔近く
投稿日時: 2008-02-21 13:04
考えて見たのですが、2点あります。

1)正規表現を使わない方がよいのでは(別の方法を考えては?)

2)アイデアですが、最初に改行を取り去ってから正規表現をすれば簡単です。

(あと、2パターンを想定していますがさらに検証した方がよいと思います)

参考になればと思います。
_________________
macrosoft
会議室デビュー日: 2008/02/21
投稿数: 3
投稿日時: 2008-02-22 10:40
自己解決しました。
下記の正規表現で取得できました。
ポイントはピリオドが改行コード(\\n)を含まないことでした。
皆様アドバイスありがとうございました。

"(?<=(^|\\r\\n)Content-Disposition: attachment;\\r\\n\\tfilename="")[^""]*(?=""\\r\\n\\r\\n)"
1

スキルアップ/キャリアアップ(JOB@IT)