Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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
Regex 使用正则表达式捕获重复组_Regex - Fatal编程技术网

Regex 使用正则表达式捕获重复组

Regex 使用正则表达式捕获重复组,regex,Regex,我正在尝试解析如下所示的输入行: 10岁,10岁,10岁,10岁,10岁,10岁,周,如果他们,1/22:45,2/00:00:58390,F,0743,他们,他们,他们,他们,他们,他们,3/02:30,3/05:30,10岁,10岁,他们,10岁,10岁,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,

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

10岁,10岁,10岁,10岁,10岁,10岁,周,如果他们,1/22:45,2/00:00:58390,F,0743,他们,他们,他们,他们,他们,他们,3/02:30,3/05:30,10岁,10岁,他们,10岁,10岁,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们克拉克斯,0/07:21,0/12:24370,0802楼,0/14:49,0/18:09370,0806楼,KMEM

前5个“字段”为“标题”(“AC#10,N850FD,10%,周,IFR”),其余为6个“字段”的重复组(例如,“1/22:45,2/00:58390,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{2}、d、[FR]、\d++、[a-Z0-9]{3,5}

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

示例如下:

以下是我希望(作为团队)得到的结果:

  • AC#
  • 十,
  • N850FD
  • 10%
  • IFR
  • ,1/22:45,2/00:58390,英国皇家水族馆0743楼
  • ,3/02:30,3/05:04380,1202层,KMEM
  • ,3/11:15,3/20:04350,F,0038,LFPG
  • ,4/04:00,4/15:35330,ZGG 5342楼
  • ,4/19:05,4/22:50370,RJAA 5608楼
  • ,5/13:25,5/14:45300,楼,0060,RJPB
  • ,5/18:05,6/06:35330,F,0060,KMEM
  • ,6/20:45,0/05:42340,北京时间0948
  • ,0/07:21,0/12:24370,KLAX 0802楼
  • ,0/14:49,0/18:09370,F,0806,KMEM

    • 可能RegEx不是执行此任务的正确工具。也许你们可以用它把字符串拆分成数组。Rest作业用于
      数组\u块

      $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);
      

      我无法让它与一个正则表达式一起工作(仍然认为这应该是可能的),但是我用了两次就让它工作了。首先,我使用下面的正则表达式,将“header”的各个字段拆分为多个组,然后获取输入行的其余部分作为最后一个组(在最后一个逗号后使用“(*)”):

      (AC#)、(\d+)、([a-zA-Z0-9]+)、(\d++%)、周日、(IFR|VFR)、(.*)

      这让我把剩下的信息放在一个小组里(“1/22:45,2/00:00:58390,F,0743,KEWR,3/02:30,3/05:05:04380,F,1202,KMEM,3/11:15,3/20:20:20:04350,F,1/11:15,3/11:15,3/11:15,3/11:15:15:20:20:04350,F,F,F,F,F,F,F,F,第1202,第1202,他们他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,他们,3/11:15:15:15:15,3/11:15,3/11:15,3/15,3/15,3/15,3:15,3/15,3/15,3/20:15,3/20:15,3/20:20:20:20:20:20:20:20:20:20克拉克斯,0/14:49,0/18:09370,0806楼,KMEM)。然后,我用另一个正则表达式解析该组,该正则表达式对重复部分进行分组(没有问题-现在不再有“头”):

      (\d\/\d{2}:\d{2}、\d\/\d{2}:\d{2}、\d+,[FR]、\d+,[A-Z0-9]{3,4})+


      这些组如我所希望的那样(甚至更好的是,“,”不再是结果的一部分)。奇怪的是,它不能处理“标题”。无论如何,我不必“手动”拆分行,正则表达式语句仍然可以“验证”每个部分。

      组从何处开始/结束?第一个reeting组从后面开始(IFR | VFR)并以“KEWR”结尾。如示例所示(除了我忘了包括最后一个“字段”):“1/22:45,2/00:58390,F,0743,KEWR”。我有一个疯狂的想法。在逗号上拆分一个数组怎么样。然后加入该数组的前5个元素。然后加入下一组6个元素以获取数据。我相信这将有助于提取数据,但同时我想使用正则表达式“验证”数据C#是我的毒药,但我明白你的意思。我可以用逗号分隔整行,然后连接各个部分,然后使用正则表达式验证每个部分。但我相信这应该是可能的与正则表达式在一个去一些how@PelleLiljendal在某种程度上,你几乎有一个验证。只需在正则表达式前面放一行的开头,重复数据部分,然后在正则表达式的末尾添加一行的结尾。如果其中一个数据组不符合要求,则regex将不会有匹配项?