提取组值并在同一个正则表达式中使用它?

时间:2018-01-05 00:02:10

标签: c# regex

我只是想知道这样的事情是否可行?假设我有一个字符串

    length(hex)   crc
        |          |
       ---        ---
    ABC011abcdefghCRC
    ---   --------
     |        |
     id      body

前3个字符(ABC)标识数据包,下一个3(011)表示数据包的总长度。是否可以编写一个提取和使用长度来匹配完整数据包的正则表达式?

如果可以,我想扩展正则表达式以匹配多个数据包。

1 个答案:

答案 0 :(得分:1)

我认为您甚至不应该考虑使用正则表达式来解析结构完全可分离的任务。 Regex专为搜索而设计,而不是用于解析,良好的行为是避免使用它进行解析。相反,自己解析它,它会比一些被劫持的正则表达式更简单,更简单,只有你能理解。以下是单个字符串中多个数据包的示例:

var input = "ABC011abcdefghCRCABC011abcdefghCRCABC011abcdefghCRCABC011abcdefghCRCABC011abcdefghCRC";

var offset = 0;
while(offset< input.Length)
{
    var id = input.Substring(offset, 3);                offset+=3;
    var length = int.Parse(input.Substring(offset, 3)); offset+=3;
    var body = input.Substring(offset, length);         offset+=length;
    var crc = input.Substring(offset, 3);               offset+=3;
}