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

能否使用Z3求解满足给定字符串样例的最简正则表达式?

基于Microsoft Z3求解匹配指定字符串集的最简正则表达式

完全可以通过Microsoft Z3实现该需求,对应你给出的样本集{"01", "001", "000111", "01111"},确实可以求解得到预期结果0*1*,具体实现逻辑如下:

  • 首先明确约束条件:第一,生成的正则表达式必须匹配所有输入的正样本;第二,你需要先定义“最简”的量化标准,通常按正则的语法长度、或者等价DFA的状态数来判定,数值越小越简单。
  • 建模时可以优先用正则等价的有限状态自动机(DFA)做中间载体:把DFA的状态、转移规则、接受状态都定义为Z3的求解变量,添加约束要求所有输入样本都能被该DFA接受,再通过最小化DFA的状态数完成求解。
  • 得到最小状态的DFA后,直接转换为等价的正则表达式即可,你给出的样本对应的最简DFA仅包含3个状态,转换后就是0*1*。
  • 如果没有负样本做限制,求解时可能会得到.*这类过泛的结果,你可以额外添加约束限定正则允许使用的运算符(比如仅允许0、1字面量、*、字符串拼接等),即可得到符合预期的结构。
  • 也可以换更直接的实现思路:按长度从小到大枚举正则候选,用Z3验证候选是否满足匹配所有样本的约束,第一个满足条件的就是你要的最简正则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 16:09:00