2012-03-14 41 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

相關問題