PHP正则表达式:无法识别下一个子模式是否启动另一个模式

时间:2011-11-02 11:30:25

标签: php regex

我一直在尝试从文件中提取这些数据,但问题是,在我遇到困难的时候,可能会有一个全新的模式(以日期开头),或者可能有一个补充在路线中(不以数字开头)。

我无法确定下一个数字是新模式还是补充数字。我也无法优化此模式,因为您可以在EQPT标记后看到。

要匹配的字符串示例:

291011 311011 1234560 AZU4059 E190/M SBKP1513 N0458 350 DCT BGC DCT TRIVI DCT CNF UW58      SBRF0249 EQPT/WRG PBN/D1O1 EET/SBRE0107 SAGAZ/N0454F370 UW58 GEBIT UW10

271011 UFN    1230060 AZU4062 E190/M SBPA2140 N0460 350 UM540 OSAMU DCT NEGUS UW47          SBKP0120 EQPT/WRG PBN/D1O1 EET/SBBS0106

到目前为止我的正则表达式:

preg_match_all('/([0-3][0-9][0|1][0-9][0-9]{2})\s*(UFN|[0-3][0-9][0|1][0-9][0-9]{2})\s*([0-7]{7})\s*(AZU[0-9]{4})\s*([A-Z0-9]{4})\/([L|M|H])\s*([A-Z0-9]{8})\s*(N[0-9]{4})\s*([0-9]{3})\s*([\S\s]{1,40})\s*([A-Z0-9]{8})\s*(EQPT\/WR?G?\s?P?B?N?\/?D?1?O?1?\s?E?E?T?\/?([A-Z0-9]{8})?)\s*)/', $result, $match);

1 个答案:

答案 0 :(得分:0)

我明白了!

我必须做很多事情来完成这项工作:

我删除了所有空白的双空格,并用“######”替换了所有第一个子模式日期。我还用“UFN”替换了第二个参数,并用几个数组映射了我替换的参数。

然后我在最后添加了一个#并在正则表达式模式的末尾使用它,这样就可以确定它在#时会出现一个新的模式。一切顺利,我只需要重新定位路线的其余部分,以便与另一条路线相辅相成。

感谢您的帮助!