使用Z3 Java-API将字符串与正则表达式进行比较时遇到问题。
对于某些目标正则表达式:
"^[a-zA-Z]"
当我尝试将字符串与正则表达式匹配时,它仍被识别为字符串。例如:
SeqExpr c1 = ctx.mkString("^[a-zA-Z]");
ReExpr c2 = ctx.mkToRe(ctx.mkString("abc"));
s.add(ctx.mkInRe(c1, c2));
s.check();
System.out.println("c1 = " + c1);
System.out.println("mkInRe = " + ctx.mkInRe(c1, c2));
System.out.println(s.check());
结果是:
c1 = "^[a-zA-Z]"
mkInRe = (str.in.re "^[a-zA-Z]" (str.to.re "abc"))
UNSATISFIABLE
整个“ ^ [a-zA-Z]”部分被识别为字符串,而不是正则表达式。
我发现Defining constraints in Z3 using Boolean operators,这个问题是高度相关的,可以在Z3 Java中完成与正则表达式类似的事情吗?
谢谢!