PHP将这些值拆分的最佳方法是什么?

时间:2010-02-15 16:47:26

标签: php regex parsing datamapper

我很难想到这个,因为我认为我不知道我的所有选择。

我必须解析一个自由格式文本字段,我需要将值映射到数据库。

以下是一些示例文本,注意:并非所有字段都必须存在,并非所有分隔符都相同,并且并非所有描述符都可用。我确实需要检查该值是仅为数字还是字母数字。

示例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 个答案:

答案 0 :(得分:0)

也许您应该对java .properties格式进行标准化,然后您可以使用此PHP示例来解析它:

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

答案 1 :(得分:0)

因为它仍然停留在我的脑海中...我开始处理它的方式是开始处理每个案例,看看是否有任何剩余的调整/后果。似乎使这个棘手的是唯一可靠的分隔符是“字段”,如果有人在描述中使用它,它将会破坏。我只需要获取文件并开始迭代。

使用此正则表达式对其进行拆分至少是划分标头和数据的良好起点。基本上,字段加上附加的可选文本,涵盖了在结束前添加“描述”和“第四”的可能性:

字段[^:] {0,12}:

在那之后,你至少必须删除尾随/对于案例#2,对于案例#5来说是' - ',如果你不想在案例#1的数据中使用额外的换行符。

答案 2 :(得分:0)

RegEXP在某些边缘情况下很难维护。尝试编写一个简单的有限状态机

答案 3 :(得分:0)

经过多次尝试/试错我将把它们读入数组并解析每行文本。这很长,一团糟,但应该完成工作。