我必须解码这些帧。帧在长字符串中,帧的开头是"CC",帧的结尾是"DD"。我想捕捉页眉和页脚之间的所有内容。
我找到了所有的框架,并将它们放入阵列中。阵列样本看起来像:
CCdatadfhdfghata1DD
CC3DD
CCdatazxczxczxczxdata3DD
现在我想从这些框架中去掉页眉和页脚。所以我准备了RegEx:
[^CC][a-zA-Z0-9]+[^DD]
但是,它不会匹配具有内容3的帧。为什么?[a-zA-Z0-9]+
表达式不应该覆盖它吗?我期望:
datadfhdfghata1
3
datazxczxczxczxdata3
相反,我看到:
datadfhdfghata1
datazxczxczxczxdata3
您的正则表达式根本不符合您的期望。此处:
Negated character class: Any character that aren't "C" or "C" (aka redundant)
|
| A character from the ranges
| |
| | > A character that isn't "D" or "D"
[^CC][a-zA-Z0-9]+[^DD]
这将在非"C"(包括C)的字符、一个到多个a-zA-Z0-9
和非"D"(包括D)的字符之间匹配。这种逻辑是不正确的,因为只有当序列至少有三个字符长时,它们才会匹配。更改为:
CCK[a-zA-Z0-9]+(?=DD)
表达式解释:
CC
按字面顺序匹配"CC"K
丢弃匹配并保留[a-zA-Z0-9]+
你想要匹配的东西(?=DD)
断言"DD"遵循我们的匹配
这是一个regex演示。
附带说明一下,[a-zA-Z0-9]
可以替换为简写类[^W_]
。
方括号内的^
转换为NOT运算。所以你实际上是在告诉它寻找不以"C"开头的模式。
尝试CC([a-zA-Z0-9]+)DD
。括号允许您从没有CC和DD块的模式中提取匹配的数据。