我正在研究 MIME 格式的电子邮件解析器。我被迫使用用 C 编写的“posix regex”库,我想知道它的行为。
假设我们有以下部分电子邮件:
--------------010402010107070509040804
Content-Type: text/plain; charset=ISO-8859-2
Content-Transfer-Encoding: 8bit
plain message
--------------010402010107070509040804
Content-Type: text/html; charset=ISO-8859-2
Content-Transfer-Encoding: 8bit
html message
--------------010402010107070509040804--
现在我需要获取不同类型的消息(纯文本和 html)。我使用以下模式来获取边界之间的数据:
^((.|\\s)+?)--------------010402010107070509040804
这种模式在一些 RegEx 库中运行良好。例如,当我在 javascript 中编写相同的正则表达式过程时,我能够毫无问题地获取这两个部分的消息。
但是,“posix regex”库会在最后返回整个消息,不包括“--”。这是它的结果:
--------------010402010107070509040804
Content-Type: text/plain; charset=ISO-8859-2
Content-Transfer-Encoding: 8bit
plain message
--------------010402010107070509040804
Content-Type: text/html; charset=ISO-8859-2
Content-Transfer-Encoding: 8bit
html message
--------------010402010107070509040804
为什么在普通消息后找到第一次出现边界后它没有停止?我错过了什么吗?