正则表达式为不寻常的Base64蒙版

时间:2013-06-10 03:00:29

标签: regex encoding base64 mask

我正在寻找能够检测恶意软件中使用的不同Base64掩码的正则表达式,例如

  • 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ + /
  • 0ABcDEFGHIJKLMNOPQRSTUVWXYZabCdefghijklmnopqrstuvwxyz123456789 + /

但是我的简单正则表达式也匹配重复的字符串,如“ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ

 [a-zA-Z0-9+/]{64}

有没有办法使用正则表达式匹配非重复的64个字符?

1 个答案:

答案 0 :(得分:0)

如果您要验证您有64个字符并检测到它们中没有一个是字符串中任何位置的重复字符,例如

好字符串:0ABcDEFGHIJKLMNOPQRSTUVWXYZabCdefghijklmnopqrstuvwxyz123456789+/

错误字符串0ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefGhijklmnopqrstuvwxyz123456789+/,因为G出现两次

然后你可以使用这个正则表达式:

^(?=.{64}$)(?!.*?(.)(?=.*?\1))

enter image description here

如果输入字符串有64个唯一字符,正则表达式将返回匹配。

  • ^匹配字符串的开头
  • (?=.{64}$)向前看以确保字符串
  • 中有64个字符
  • (?!强制否定向前看,如果内部表达式为真,则返回false
  • .*?将前言移到任何角色
  • (.)捕获单个字符并放入捕获组1
  • (?=打开正向前看以查看第1组中当前角色之后的任何字符是否相同
  • .*?跳过任意数量的字符,直到找到下一个字符
  • \1对捕获组1的反向引用以确保字符不重复
  • )关闭积极向前看
  • )关闭负面展望