キーと値のペアを探して、受信メールの本文を解析しています。
メール本文の例
名: 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 パーサーでやりたいことはすべて実行できます。