PHP正则表达式:无法识别下一个子模式是否启动另一个模式
我一直试图从一个文件中提取这些数据,但问题是,在我陷入困境的时候,可能会有一个全新的模式(以日期开始),或者可能会有一个补码(不是以数字开始) 我很难确定下一个数字是新模式还是补码。我也没有能够优化这个模式,正如你在EQPT标记后看到的那样 要匹配的字符串示例:PHP正则表达式:无法识别下一个子模式是否启动另一个模式,php,regex,Php,Regex,我一直试图从一个文件中提取这些数据,但问题是,在我陷入困境的时候,可能会有一个全新的模式(以日期开始),或者可能会有一个补码(不是以数字开始) 我很难确定下一个数字是新模式还是补码。我也没有能够优化这个模式,正如你在EQPT标记后看到的那样 要匹配的字符串示例: 291011 311011 1234560 AZU4059 E190/M SBKP1513 N0458 350 DCT BGC DCT TRIVI DCT CNF UW58 SBRF0249 EQPT/WRG PBN/D1O1
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);
我明白了
我必须做很多事情才能让这一切顺利进行:
我删除了所有空白的双空间,并将所有的第一子模式日期替换为“α-x”。我还用“UFN”替换了和第二个参数,并用几个数组映射了我替换的参数
然后我在末尾添加了一个#,并在regex模式的末尾使用它,这样就可以确定当它到达一个#时它将启动一个新模式。这一切都解决了,然后我只需要重新定位路线的其余部分,以便补充另一条路线
谢谢你的帮助 你还可以添加-示例匹配输出吗?它输出相同的东西,execpt它将它们组织到一个表中,正如我看到的,现在你有一个空行,可以用作分隔符。是这样吗?不是真的。。。它们实际上不是新行,它们后面只是空白。。。在要匹配的字符串示例中,我只是将它们分隔开,以便更容易看到第一个字符串有补码,第二个字符串在SBBS0106处结束。那么,我的朋友,你有问题了。您必须找到正则表达式的“入口”点。匹配从哪里开始和停止?在正则表达式中硬编码所有内容-就像您所做的那样-不是一个好的实践。更改一个字符,您的正则表达式将失败。