背景
业务上的一个字段在解析时为了避免脏数据导致后续ETL的异常,决定从源头将该字段严格按照设计的规则去匹配。该字段的上传是设备端传上来的文件中的一个字段。
正向?反向?
问题
业务中有这么一个正则表达式
上线后大概四个小时候用户反馈出现问题。
也就是说并不是所有的id都匹配不到,是偶发的。所以比较隐蔽。发现问题之后立即进行了退版操作。
正则如下
大家可以在这里测试测试。
有几个id匹配不到,可实际上应该匹配到。
原因分析
这个正则匹配到这一步为啥会从头开始匹配?
使用regex101 debug mode 时,发现在匹配最后一个真这个块时发生了 pattern backtrack indicator。
没错是发生了回溯。回溯之后就匹配不到了。
为什么会发生回溯呢?
如何解决?
chatgpt 3.5
GP4的表现