首页 > 解决方案 > 使用 RegEx 捕获重复组

问题描述

我正在尝试解析如下所示的输入行:

AC#10,N850FD,10%,WEEK,IFR,1/22:45,2/00:58,390,F,0743,KEWR,3/02:30,3/05:04,380,F,1202,KMEM,3 /11:15,3/20:04,350,F,0038,LFPG,4/04:00,4/15:35,330,F,5342,ZGGG,4/19:05,4/22:50,370,F,5608 ,RJAA,5/13:25,5/14:45,300,F,0060,RJBB,5/18:05,6/06:35,330,F,0060,KMEM,6/20:45,0/05:42,340 ,F,0948,PHNL,0/07:21,0/12:24,370,F,0802,KLAX,0/14:49,0/18:09,370,F,0806,KMEM

前 5 个“字段”是“标题”(“AC#10,N850FD,10%,WEEK,IFR”),其余是重复的 6 个“字段”组(例如“1/22:45,2 /00:58,390,F,0743,KEWR")。

我是 RegEx 新手,但为此我想出了以下 RegEx 声明(AC#)(\d+),([a-zA-Z0-9]+),(\d+%),(WEEK|DAY),(IFR|VFR)(,\d\/\d{2}:\d{2},\d\/\d{2}:\d{2},\d+,[FR],\d+,[A-Z0-9]{3,5})+

前许多组(“标题”中的每个“字段”)的结果被很好地提取,我可以轻松访问每个值(组)。但是我的问题是以下/重复组。只有最后一个重复的“组”被提取。如果我删除最后一个“+”,则仅提取重复“组”中的第一个(自然)。

此处示例:https ://regex101.com/r/HsQMge/1

这是我希望得到的结果(作为组):

标签: regex

解决方案


可能 RegEx 不是执行此任务的正确工具。也许您可以将其仅用于将字符串拆分为数组。休息工作是为了array_chunk

$str = "AC#10,N850FD,10%,WEEK,IFR,1/22:45,2/00:58,390,F,0743,KEWR,3/02:30,3/05:04,380,F,1202,KMEM,3/11:15,3/20:04,350,F,0038,LFPG,4/04:00,4/15:35,330,F,5342,ZGGG,4/19:05,4/22:50,370,F,5608,RJAA,5/13:25,5/14:45,300,F,0060,RJBB,5/18:05,6/06:35,330,F,0060,KMEM,6/20:45,0/05:42,340,F,0948,PHNL,0/07:21,0/12:24,370,F,0802,KLAX,0/14:49,0/18:09,370,F,0806,KMEM";

$data = preg_split('/[,#]/',$str);
$data = array_chunk($data, 6);

var_dump($data);

在线尝试!


推荐阅读