2010-02-15 31 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在某些边缘情况下很难维护。尝试编写一个简单的有限状态机

相关问题