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

PHP分割这些值的最佳方法是什么?,php,regex,parsing,datamapper,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:

这件事让我很难过,因为我不知道我所有的选择

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

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

示例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都在自己的列中。请注意,示例数据的顺序相同,但实时数据的顺序不同

现在,如果需要的话,我不介意分步进行,但是很难将值解析为列。有什么建议吗


我在考虑使用正则表达式的某种case函数,但到目前为止还不走运。

也许你应该标准化java格式,然后你可以使用这个PHP示例来解析它:


既然它还在我的脑海里。。。我要做的就是开始处理这些案例,看看是否还有任何剩余的调整/影响。让这个问题变得棘手的是,唯一可靠的去污剂是“field”,如果有人在描述中使用它,它就会崩溃。我只需要获取文件并开始迭代

用这个正则表达式拆分它至少是划分头和数据的一个好的起点。基本上,字段加上额外的可选文本,包括在结束前添加的“说明”和“第四号”的可能性:

字段[^:{0,12}:


在这之后,如果您不想在案例1的数据中使用额外的换行符,您至少必须去掉案例2的尾随/换行符,案例5的“-”换行符。

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

经过多次思考/反复尝试,我将把它们读入一个数组并解析出每一行文本。它很长,会很混乱,但应该完成这项工作。

一个明显的建议是,不要使用自由格式的文本字段作为需要解析的输入…我同意,不是我做的,但现在我必须解决这个问题。如果我是你,我会在格式方面对用户施加结构。对我来说,让用户“自由发挥”似乎是一个可怕的想法。我不是说你需要表单中具体的
输入
元素,只是说你应该提出一种适合你的数据需要的纯文本格式,并使它们符合它-这是假设在这一点上是可能的。看,我理解自由格式文本字段的含义,这就是为什么要问这个问题。我现在让用户在每个字段中输入正确的信息,但我需要将现有数据转换为新格式您可以制作一个正则表达式来处理这5个特定案例,或者运行正则表达式将每个案例规范化为单个格式,有趣的是,我不知道如何把这个应用到我的问题上,你能给我举个例子吗?