用于提取FDF数据的PHP正则表达式代码
我正在尝试使用PHP和正则表达式解析FDF文件。但我就是不能在regex周围动脑。我一直在解析文件以生成数组用于提取FDF数据的PHP正则表达式代码,php,regex,fdf,Php,Regex,Fdf,我正在尝试使用PHP和正则表达式解析FDF文件。但我就是不能在regex周围动脑。我一直在解析文件以生成数组 %FDF-1.2 %âãÏÓ 1 0 obj << /FDF << /Fields [ << /V (email@email.com) /T (field_email) >> << /V (John) /T (field_name) >> << /V () /T (field_reference)
%FDF-1.2
%âãÏÓ
1 0 obj
<<
/FDF
<<
/Fields [
<<
/V (email@email.com)
/T (field_email)
>>
<<
/V (John)
/T (field_name)
>>
<<
/V ()
/T (field_reference)
>>]
>>
>>
endobj
trailer
<<
/Root 1 0 R
>>
%%EOF
为什么它会把)
和新行归纳起来?我知道对于理解正则表达式的人来说,这个问题并不重要。因此,非常感谢您的帮助。说明
初始表达式只查找表示每个键和值集的整个文本块。然后在“清理”部分中,您正在查找紧跟字符串末尾的close paran,但我确信close paran和字符串末尾之间还有其他字符
相反,我将在一次操作中处理所有这些。此表达式将:
- 查找字段值
- 修剪周围的帕伦
- 然后进入捕获组1
- 找到值的名称并放入捕获组2中
- 修剪
子字符串字段
- 修剪周围的帕伦
- 然后进入捕获组2
- 修剪
- 需要选项:不区分大小写和多行
^\/V\s\([^)]*)\[\r\n]*^\/T\s\(field\([^)]*)\
例子
示例文本
%FDF-1.2
%âãÏÓ
1 0 obj
<<
/FDF
<<
/Fields [
<<
/V (email@email.com)
/T (field_email)
>>
<<
/V (John)
/T (field_name)
>>
<<
/V ()
/T (field_reference)
>>]
>>
>>
endobj
trailer
<<
/Root 1 0 R
>>
%%EOF
或 如果希望保留
字段
子字符串,则可以简单地从表达式中删除它,如下所示:
^\/V\s\([^)]*)\[\r\n]*^\/T\s\([^)]*)\
添加\ims标志,正则表达式在php中可以完美地工作(preg_match_all(“/^\/V\s([^)]*)[\r\n]*/T\s(field_([^)]*)/ims“,$file,$out,preg_SET_ORDER);同时,对于debuggingRegexp来说非常适合,但对于解析FDF来说并不适合,例如Chrome提交FDF
[]
Array
(
[field_email)
] => email@email.com)
[field_name)
] => John)
[field_reference)
] => )
)
%FDF-1.2
%âãÏÓ
1 0 obj
<<
/FDF
<<
/Fields [
<<
/V (email@email.com)
/T (field_email)
>>
<<
/V (John)
/T (field_name)
>>
<<
/V ()
/T (field_reference)
>>]
>>
>>
endobj
trailer
<<
/Root 1 0 R
>>
%%EOF
[0][0] = /V (email@email.com)
/T (field_email)
[0][1] = email@email.com
[0][2] = email
[1][0] = /V (John)
/T (field_name)
[1][1] = John
[1][2] = name
[2][0] = /V ()
/T (field_reference)
[2][1] =
[2][2] = reference