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

CTF正则表达式挑战:匹配所有字符出现次数一致的字符串

CTF正则表达式挑战:匹配所有字符出现次数一致的字符串

嘿,这确实是个够硬核的正则挑战!先把需求和测试用例理清楚:我们需要一个正则表达式,能精准匹配所有不同字符出现次数完全相同的字符串——不管字符类型是什么、字符串长度多少(上限62位),而且得用Python的regex模块(支持递归、命名组这类高级特性)。先看看给定的测试样本:

预期匹配的字符串

  • "arraigning"
  • "nonordered"
  • "abadbacdcacbdbdc"
  • "mesosome"
  • "ananna"
  • "unendued"
  • "tromometer"
  • "caucasus"
  • "intestines"
  • "i"
  • "deed"
  • "horseshoer"
  • "happenchance"
  • "reappear"
  • "deeded"
  • "pullup"
  • "testes"
  • "mononymy"
  • "scintillescent"
  • "couscous"

预期不匹配的字符串

  • "edified"
  • "unreverberating"
  • "underpass"
  • "interinsert"
  • "pilfered"
  • "nippiness"
  • "gregarinian"
  • "deicide"
  • "nonaristocratic"
  • "rototiller"
  • "ozonizing"
  • "museums"
  • "backbreaker"
  • "interradiated"
  • "antistalling"
  • "naturalize"
  • "equitriangular"
  • "reparticipate"
  • "ppd"
  • "miasmas"
  • "cabbage"

核心问题:能不能用Python regex实现?

直接说结论:哪怕用Python的高级regex模块,也几乎不可能写出这样的正则表达式,原因如下:

  1. 正则的本质是有限状态自动机(FSM),它只能跟踪有限数量的状态。而要验证“所有字符出现次数相同”,需要跟踪任意多个不同字符的出现次数——这意味着需要无限多的状态,完全超出了FSM的能力边界。
  2. 虽然Python的regex支持递归、命名组和平衡匹配,但这些特性主要用来处理嵌套结构(比如括号匹配),没法动态跟踪任意字符的计数同步。你没法提前预知字符串里会有多少种不同字符,更没法让正则“记住”每个字符已经出现了多少次,再和其他字符的次数做对比。

最优替代方案

既然正则这条路走不通,最直接高效的方案是用Python代码实现字符计数验证,逻辑简单且准确率100%:

from collections import Counter

def is_valid_char_count(s):
    # 统计每个字符的出现次数,取所有次数值
    count_values = Counter(s).values()
    # 所有次数相同的话,去重后只剩一个值
    return len(set(count_values)) == 1

用这个函数测试给定的样本:所有match_words都会返回True,not_match_words返回False,完全符合需求。

如果是CTF场景下非要用正则凑个近似?其实最多只能匹配一些特定情况(比如所有字符出现1次,或所有字符出现2次),但没法覆盖所有可能的情况——毕竟你没法提前知道每个字符串的字符次数k是多少。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 07:23:06