【发布时间】:2019-04-04 18:11:54
【问题描述】:
我要处理以下问题。 我必须从通信缓冲区中提取消息。可悲的是,通信协议很糟糕,结构也不是很好。我想出的区分缓冲区中数据包的唯一方法是由服务器传输的中间“ack”命令。
示例:
[包1][ACK][包2][ACK][包3]
我可以使用 String.Split(ACK),但分隔符也不一致。不过,有 3 条规则可以识别 ack 数据包。
- 以“AK”开头。
- 以“0”或“1”结尾。
- 总长度为 5 个字符。
确认示例:
"AKxxy" 其中:
xx: (01 到 99)
y: (0 或 1)
我希望可能有一个正则表达式可以解决我的问题,但我缺乏所需的知识和时间。
是否有任何正则表达式“专家”可以帮助我?随时提出任何解决方案。
谢谢。
编辑:
示例数据包(我真的不得不删除数据包信息):
AK010机密包1AK011机密包2AK020AK011机密包3AK021机密包4AK050
遗憾的是,协议中的每个数据包都不是以特定字符开头或结尾的,所以我无法区分它们。为了识别每一个,我必须使用 ack 数据包将它们拆分,然后对每一个执行不同的检查。
【问题讨论】:
-
您能否编辑问题并添加一些示例字符串和预期输出?
-
“但我缺乏所需的知识和时间。”这就是为什么你把你的工作交给我们?这不是 SO 应该如何工作的。我们都有自己的工作,时间不多。因此,如果您卡在某个特定点,请善待自己并提出问题。
-
@HimBromBeere 确实,我似乎将工作交给了其他人,但这不是我的目标。我认为对于一个对 RegEx 有深刻理解的人来帮助我将是一件容易的事。在过去的几天里,我一直在尝试使用复杂、丑陋且最终不正确的字符串操作来解决这个问题,但我做不到。如果我违反了任何社区政策,我深表歉意。
-
更大的风险/问题是如果包裹可以跨越缓冲区的末端。
标签: c# regex string split packet