Regex 在正则表达式集中查找与尽可能多的正则表达式匹配的字符串

Regex 在正则表达式集中查找与尽可能多的正则表达式匹配的字符串,regex,z3,z3py,sbv,Regex,Z3,Z3py,Sbv,假设我有一个正则表达式集R,我如何找到一个字符串s来匹配尽可能多的正则表达式 例如,如果R={a\*b,b\*,c},那么s可以是“b”。我不确定,也许z3解算器会有帮助?是的,z3可以通过正则表达式和优化来处理这个问题。您可以直接使用SMTLIB或其他语言绑定到Z3(C、C++、java、Haskell等),找到Python和Haskell版本: python 使用到z3的Python绑定: 从z3导入* re1=Concat(Star(Re(“a”)),Re(“b”)) re2=星(Re(“

假设我有一个正则表达式集R,我如何找到一个字符串s来匹配尽可能多的正则表达式


例如,如果
R={a\*b,b\*,c}
,那么
s
可以是
“b”
。我不确定,也许z3解算器会有帮助?

是的,z3可以通过正则表达式和优化来处理这个问题。您可以直接使用SMTLIB或其他语言绑定到Z3(C、C++、java、Haskell等),找到Python和Haskell版本:

python 使用到z3的Python绑定:

从z3导入*
re1=Concat(Star(Re(“a”)),Re(“b”))
re2=星(Re(“b”))
re3=Re(“c”)
s=字符串('s')
o=优化()
i=If(InRe(s,re1),1,0)+If(InRe(s,re2),1,0)+If(InRe(s,re3),1,0)
o、 (i)
r=o.检查()
如果r==sat:
打印(o.model())
其他:
打印(“解算器说:%s”%r)
当我运行此程序时,我得到:

[s = "b"]
它查找字符串
b
,如您所述

哈斯克尔 下面是使用Haskell中的库编写的相同示例:

{-#语言重载字符串}
导入数据.SBV
导入Data.SBV.RegExp
find=优化词典$do
s
Optimal model:
  s          = "b" :: String
  matchCount =   2 :: Integer