正则表达式:通过多次捕获进行解析
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}
详情
(?<=i20100.i20100(?<Date>.{10})(?:.{6})*?)
- 与紧接在前面的字符串中的位置匹配的正先行
i20100.i20100
- i20100
, 而字符只是一个换行符,i20100
(?<Date>.{10})(?:.{6})*?
- 组 Date
匹配换行符以外的 10 个字符,然后任何 6 个字符的任何 0+ 重复,但换行符,尽可能少
42.{4}
- 42
然后是换行符以外的任何 4 个字符
早上好。我从设备
编辑了以下行 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}
详情
(?<=i20100.i20100(?<Date>.{10})(?:.{6})*?)
- 与紧接在前面的字符串中的位置匹配的正先行i20100.i20100
-i20100
, 而字符只是一个换行符,i20100
(?<Date>.{10})(?:.{6})*?
- 组Date
匹配换行符以外的 10 个字符,然后任何 6 个字符的任何 0+ 重复,但换行符,尽可能少
42.{4}
-42
然后是换行符以外的任何 4 个字符