2012-03-14 29 views
6

Tôi đang tìm các cách phân tích cú pháp dữ liệu văn bản có cấu trúc khác nhau trong PHP và nhận dữ liệu đó vào biểu đồ đối tượng PHP. Tôi đã thấy rất nhiều trình phân tích cú pháp khác nhau trong PHP cho một loạt các định dạng tệp dựa trên văn bản nhưng khá nhiều tất cả chúng dường như là một chuỗi các biểu thức chính quy giòn. Phải có cách tốt hơn!Phân tích cú pháp dữ liệu văn bản có cấu trúc trong PHP

Trong trường hợp cụ thể này, tôi đang tìm cách phân tích các tệp MT940 (giao dịch tài khoản ngân hàng). Nhưng tôi cũng đã gặp phải vấn đề tương tự với các định dạng tệp khác. Luôn luôn tôi kết thúc với một chuỗi lớn các regexes trở nên phức tạp để duy trì, đặc biệt là khi các định dạng khác nhau cần được hỗ trợ. MT940 cũng có vấn đề này. MT940 không phải là định dạng được xác định nghiêm ngặt và khá nhiều ngân hàng sử dụng phương ngữ hơi khác.

Vì vậy, làm thế nào để bạn thiết kế các trình phân tích cú pháp mạnh mẽ hơn và có thể mở rộng để xử lý các phương ngữ khác nhau?

Dưới đây là một ví dụ MT940 tuyên bố, lấy từ 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

Tôi tự hỏi về bản thân mình, [ở đây.] (Http://stackoverflow.com/questions/7164318/parsing-markup-into-element-tree) –

+0

Vô giá. Tôi đã tìm kiếm điều này, và quay trở lại để thêm một liên kết đến một dự án tôi chỉ tìm thấy .... Nhưng so sánh (tên) github của bạn với tên tài khoản của bạn .. Tôi đoán "cảm ơn vì đã bắt đầu https://github.com/ sandermarechal/jejik-mt940 ": D – Nanne

Trả lời

3

Bạn có thể sử dụng phân tích cú pháp này miễn phí (GPL 2.0):

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

Đây là một:

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

Hy vọng rằng điều này sẽ cho phép bạn từ bỏ sáng chế bánh xe về điều này.

Vì vậy, làm thế nào để bạn thiết kế các trình phân tích cú pháp mạnh mẽ và có thể mở rộng đến đối phó với các phương ngữ khác nhau?

Rất tiếc, không có câu trả lời dễ dàng nào cho điều này. Bạn sẽ phải khóa xuống và tự làm quen với tất cả các biến thể bạn muốn hỗ trợ. Từ vua trang vuông:

Các phân tích cú pháp cố gắng để xác định nguồn gốc ngân hàng đó là từ qua vài dòng đầu tiên của tập tin và sau đó tải lên động cơ mỗi ngân hàng.

Điều này sẽ mất rất nhiều kinh nghiệm và nghiên cứu. May mắn thay, mã của họ có thể giúp bạn cùng vô cùng.

+0

Cảm ơn. Đặc biệt là trình phân tích cú pháp từ kingsquare.nl có vẻ hữu ích. Nhưng tôi cũng quan tâm đến thiết kế phân tích cú pháp tổng quát hơn. Lần này là MT940 cần phân tích cú pháp, nhưng tôi bắt gặp rất nhiều định dạng có cấu trúc (bán) cho các dự án khác nhau. Tôi muốn biết thêm một số thông tin về v.d. các nguyên tắc hoặc mẫu thiết kế để xây dựng một trình phân tích cú pháp tốt. –

+0

Tôi đã kết thúc bằng văn bản của riêng tôi, được gọi là [jejik/mt940] (https://github.com/sandermarechal/jejik-mt940). –

Các vấn đề liên quan