0

キーと値のペアを探して、受信メールの本文を解析しています。

メール本文の例
名: John
姓:Smith
メールアドレス: john@example.com
コメント =
複数行にわたるテスト コメント。

([\w\d\s]+)\s?[=|:]\s?(.+)複数行モードで正規表現を使用してみました。これはほとんどのメールで機能しますが、値の一部であるはずの改行があると失敗します。正規表現については、これ以上詳しく知りません。

行ごとにキーと値のペアを探し、キーと値のペアが見つからない場合は、最後に一致した値に行を折りたたむ別のパーサーがあります。Scalaで実装されています。

val lines = text.split("\\r?\\n").toList
var lastLabelled: Int = -1
val linesBuffer = mutable.ListBuffer[(String, String)]()

// only parse lines until the first blank line
// null_? method is checks for empty strings and nulls
lines.takeWhile(!_.null_?).foreach(line => {
  line.splitAt(delimiter) match {
    case Nil if line.nonEmpty => {
      val l = linesBuffer(lastLabelled)
      linesBuffer(lastLabelled) = (l._1, l._2 + "\n" + line)
    }
    case pair :: Nil => {
      lastLabelled = linesBuffer.length
      linesBuffer += pair
    }
    case _ => // skip this line
  }
})

RegEx を使用して、パーサーをデータベースに保存し、実行時に送信者ごとに変更できるようにしようとしています (送信者ごとに異なるパーサーを実装します)。

改行を含む値に一致するように正規表現を変更できますか? RegEx の使用を忘れて、JavaScript を使用する必要がありますか? JS を DB に格納できる JavaScript パーサーを既に持っており、基本的に RegEx パーサーでやりたいことはすべて実行できます。

4

1 に答える 1

1

私はこれがうまくいくはずだと思う...

((.+?)((\s*)(:|=)(\s*)))(((.|\n)(?!((.+?)(:|=))))+)

...ここでテスト済みhttp://regexpal.com/。一致をループすると、キーと値を引き出すことができるはずです。

于 2013-05-24T19:22:22.103 に答える