2012-03-14 21 views
6

我正在寻找各种(更好的)解析PHP中的结构化文本数据并将该数据导入到PHP对象图中的方法。我在PHP中看到了很多不同的解析器,用于各种基于文本的文件格式,但几乎所有这些解析器似乎都是一些易碎的正则表达式链。一定会有更好的办法!解析PHP中的结构化文本数据

在这个特定的情况下,我正在寻找解析MT940文件(银行帐户交易)。但是我也遇到了与其他文件格式相同的问题。总之,我最终会遇到一系列复杂的正则表达式,特别是在需要支持不同格式时。 MT940也有这个问题。 MT940不是一个严格定义的格式,几乎所有的银行都使用不同的方言。

那么,你如何设计更强大和可扩展的解析器来处理不同的方言?

下面是一个例子MT940声明,从this question采取:

{1:F01AHHBCH110XXX0000000000}{2:I940X   N2}{3:{108:XBS/091502}}{4: 
:20:XBS/091202/0001 
:25:5887/507004-50 
:28C:140/1 
:60F:C0914CHF7789, 
:61:0912021202D36,80NTRFNONREF//0887-1202-29-941 
04392579-0 LUTHY + xxx, ZUR 
:86:6034?60LUTHY + xxxx, ZUR vom 01.12.09 um 16:28 Karten-Nr. 2232 
2579-0 
:62F:C091202CHF52,2 
:64:C091302CHF52,2 
-} 
+0

我想知道这个我自己,[here。](http://stackoverflow.com/questions/7164318/parsing-markup-into-element-tree) – 2012-03-15 00:14:20

+0

无价。我正在寻找这个,并回去添加一个链接到我刚刚找到的一个项目....但是比较(您的)github名称和您的帐户名称..我想“感谢您启动https://github.com/ sandermarechal/jejik-mt940“:D – Nanne 2012-03-27 15:19:51

回答

3

你可以使用这个免费的解析器(GPL 2.0):

http://www.kingsquare.nl/php-mt940

下面是另一个:

http://www.butcher.art.pl/en/2010/09/tutoriale/parser-php-mt940-format-wyciagow-bankowych/

希望这会让你放弃重塑这一轮。

那么,你如何设计更强大的解析器,并可扩展到 处理不同的方言?

不幸的是,没有简单的答案。你不得不屈服并熟悉你想要支持的所有变体。从王广场页面:

解析器试图确定它是通过 其中来自银行的文件的前几行,然后加载了每个银行的引擎。

这将需要大量的经验和学习。幸运的是,他们的代码可以极大地帮助你。

+0

谢谢。尤其是来自kingsquare.nl的解析器看起来很有用。但我也对更一般的解析器设计感兴趣。这一次是需要解析的MT940,但我遇到了很多(半)结构化的格式用于各种项目。我想知道更多关于如设计原则或模式来构建一个好的解析器。 – 2012-03-14 22:56:01

+0

我最终写了自己的名为[jejik/mt940](https://github.com/sandermarechal/jejik-mt940)。 – 2012-03-28 05:59:51

相关问题