You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写可在文本及二进制数据中检测密码的PCRE正则表达式?

解决二进制数据中密码检测的正则方案

你的核心问题是原正则依赖空白字符作为边界,但二进制数据里的密码往往没有空白包围,甚至嵌在乱码字节中,所以需要移除空白相关的断言,调整为基于密码字符集的匹配逻辑。

修改后的PCRE正则

(?=(?:.*[a-z]))(?=(?:.*[A-Z]))(?=(?:.*\d))(?=(?:.*[[:punct:]]))[a-zA-Z\d[:punct:]]{10,}

关键调整说明

  • 移除了原正则中的(?<!\S)和(?!\S)空白边界断言,不再依赖周围的空白字符,直接匹配连续的符合规则的字符序列。
  • 四个正向预查(?=(?:.*[x]))分别确保序列包含小写字母、大写字母、数字、标点符号,满足你的密码规则。
  • 最后用[a-zA-Z\d[:punct:]]{10,}匹配连续的、属于密码字符集的序列,长度至少10位。

优化建议(减少误报)

二进制数据中容易出现大量类似密码的乱码序列,可通过以下方式优化:

  • 限制最大长度:把{10,}改成{10,30},因为真实密码一般不会超过30位,过滤过长的乱码。
  • 增加非密码字符边界:如果要避免匹配长序列中的子串,可添加负向断言确保前后不是密码字符:
    (?:(?<![a-zA-Z\d[:punct:]])|^)(?=(?:.*[a-z]))(?=(?:.*[A-Z]))(?=(?:.*\d))(?=(?:.*[[:punct:]]))[a-zA-Z\d[:punct:]]{10,30}(?:(?![a-zA-Z\d[:punct:]])|$)
    

内容的提问来源于stack exchange,提问作者jpe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 15:17:31