正则表达式:通过多次捕获进行解析

Regular Expressions: parsing through multiple captures

早上好。我从设备

编辑了以下行 return
♥☺i20100☺i2010018032809120110000074653B0F4465275D245EAA80042D82F5E000000004291D83C00000000022000007460042FD45FE7F2A4648C0004282FC0400000000429799E500000000033000007466A869946694E8145BCF80042EF811B00000000428CCAF400000000044000007461DFFC4461D1D61462B040042A15A6600000000428E635100000000&&C631♥

数据在日期时间戳后以 6 个字符的块形式返回。我试图超越日期时间并查找所有以 42 开头的 6 块。应该有 3 个块 returned.
使用 Expresso,我可以获得 all .*i20100.i20100(?<Date>.{10})(?<AANNTT>.{6})+

的块

但是我怎样才能对每一个和 return 所有以 42 开头的查询进行子查询?我认为可能是这样的:.*i20100.i20100(?<Date>.{10})(.{6})*(?<AANNTT>42.{4})+

但这只是return最后一个。

提前致谢! -戴夫

您可以使用

(?<=i20100.i20100(?<Date>.{10})(?:.{6})*?)42.{4}

regex demo

详情

  • (?<=i20100.i20100(?<Date>.{10})(?:.{6})*?) - 与紧接在前面的字符串中的位置匹配的正先行
    • i20100.i20100 - i20100, 而字符只是一个换行符,i20100
    • (?<Date>.{10})(?:.{6})*? - 组 Date 匹配换行符以外的 10 个字符,然后任何 6 个字符的任何 0+ 重复,但换行符,尽可能少
  • 42.{4} - 42 然后是换行符以外的任何 4 个字符