回溯爆炸的典型特征是一条短字符串让匹配耗时暴涨,CPU 直接跑满。
嫌疑最大的写法是嵌套量词,比如 (a+)+ 或 (.*)* 这种结构。
每层可选分支和量词叠在一起,失败时回溯次数按指数增长。
改法是用占有量词或原子组消除回溯,需要匹配整段就加锚点。
# 反例:量词嵌套,输入 "aaaa...!" 时回溯次数指数增长
^(\w+\s?)+$ # 校验整段单词
^(a+)+$ # 经典爆炸样本
# 修法一:占有量词(Java / PCRE),禁止回溯
^(?>\w+\s?)+$
# 修法二:量词写具体,限制长度和字符集
^[\w-]{1,64}$ # 用户名
# 修法三:换无回溯引擎(RE2 / re2j / Go regexp),代价是不支持反向引用
# 排查:给正则加匹配超时;用 regex101 的 debugger 看 step 数是否爆炸
# 复核重点:嵌套量词、可选分支叠加、(.*)* 这类写法
THE END






暂无评论内容