2010-02-15 34 views
0

因爲我不認爲我知道我的所有選擇,所以對此感到困難。PHP什麼是最好的方法來分裂這些值?

我必須解析一個自由格式的文本字段,我需要將值映射到數據庫。

這是一些示例文本,注意:並非所有的字段都必須在那裏,並非所有的分隔符都是相同的,並且並非所有的描述符都可用。我確實需要檢查該值是僅數字還是字母數字。

實施例1

field1: 999-999234-24-2 

field2 Description: a short description 

field3: 3.222.1 

asdfg 

field number four: NO 

field5: 

實施例2

field1: 999-999234-24-2/field2 Description: a short description/field3: 3.222.1 asdfg/field number four: NO/field5: 

實施例3

999-999234-24-2 

例4

field1: 999-999234-24-2 field2 Description: a short description field3: 3.222.1 asdfg field number four: NO field5: 

例5

field1: 999-999234-24-2 - field2 Description: a short description - field3: 3.222.1 asdfg - field number four: NO - field5: 

我想是所有領域的X是在有自己的專欄。請注意,示例數據全部採用相同的順序,但實時數據不是。

現在我不介意這樣做,如果我需要,但有一個很難解析的價值成列。有什麼建議麼?

我在想一些RegEx的情況下的功能,但目前爲止還沒有運氣。

+4

一個明顯的建議不會是使用自由格式的文本字段輸入您需要解析... – Welbog

+0

我同意,不是我做的,但現在我必須解決問題 –

+0

如果我是你,我會強加結構用戶的格式。對我來說,讓一個用戶「自由球」它似乎是一個可怕的想法。我並不是說你需要在你的表單中使用具體的'輸入'元素,只是你應該想出一個符合你的數據需求的純文本格式,並使它們符合它 - 這是假設這是一個可能性。 – prodigitalson

回答

0

經過很多雖然/試驗和錯誤我將他們讀入一個數組並解析出每行文本。這很漫長,會變得一團糟,但應該完成工作。

0

也許你應該對Java .properties格式規範,那麼你可以使用這個PHP例子來分析它:

http://www.innerweaver.com/?p=13

+0

有趣,但我不知道如何將這個應用到我的問題,你能給我一個例子嗎? –

0

因爲它仍然停留在我的頭上......我會去的路上它開始處理這些情況中的每一個,並查看是否有任何剩餘的調整/後果。看起來使這個棘手的是唯一可靠的定界符是'字段',如果任何人在描述中使用它將會中斷。我只需要接受文件並開始迭代。

用這個正則表達式分割它至少是分割頭文件和數據的一個很好的起點。

場[^:] {0,12}:基本上,收盤前加入,涵蓋「描述」和「四個數字」的可能性字段加額外的可選文本

之後,你會至少必須去除尾隨/案例#2,案例#5的' - ',如果您不希望他們在案例#1的數據中,則需要額外的換行符。

0

RegEXP在某些邊緣情況下很難維護。嘗試編寫一個簡單的有限狀態機

相關問題