Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP正则表达式:无法识别下一个子模式是否启动另一个模式_Php_Regex - Fatal编程技术网

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

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

我一直试图从一个文件中提取这些数据,但问题是,在我陷入困境的时候,可能会有一个全新的模式(以日期开始),或者可能会有一个补码(不是以数字开始)

我很难确定下一个数字是新模式还是补码。我也没有能够优化这个模式,正如你在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);
我明白了

我必须做很多事情才能让这一切顺利进行:

我删除了所有空白的双空间,并将所有的第一子模式日期替换为“α-x”。我还用“UFN”替换了和第二个参数,并用几个数组映射了我替换的参数

然后我在末尾添加了一个#,并在regex模式的末尾使用它,这样就可以确定当它到达一个#时它将启动一个新模式。这一切都解决了,然后我只需要重新定位路线的其余部分,以便补充另一条路线


谢谢你的帮助

你还可以添加-示例匹配输出吗?它输出相同的东西,execpt它将它们组织到一个表中,正如我看到的,现在你有一个空行,可以用作分隔符。是这样吗?不是真的。。。它们实际上不是新行,它们后面只是空白。。。在要匹配的字符串示例中,我只是将它们分隔开,以便更容易看到第一个字符串有补码,第二个字符串在SBBS0106处结束。那么,我的朋友,你有问题了。您必须找到正则表达式的“入口”点。匹配从哪里开始和停止?在正则表达式中硬编码所有内容-就像您所做的那样-不是一个好的实践。更改一个字符,您的正则表达式将失败。