Java Regex用于正式逻辑格式

时间:2018-12-06 03:07:15

标签: java regex format logic

我希望将字符串与形式逻辑中的表达式格式匹配,其中两个字母字符通过v | ^ |> | =进行操作,其中字符可以以〜|!|?开头,并且其中字符可能用方括号括起来,然后再加上〜|!|?。起初,我认为可以使用以下表达式:

 s.matches("^[!?~]*[(]*[!?~]*[a-z]{1}\\s[v>=^]{1}\\s[!?~]*[a-z]{1}[)]*$")

但是,我意识到这些表达式可以相互堆叠,而且我不知道如何在正则表达式中说明这一点。

可接受的匹配示例:

〜p v q

〜?(p ^〜r)

!p

p v〜(!r ^ t)

〜!(p =(〜!q ^ t))

可以根据需要添加任意多个运算符,以创建一个非常长的表达式。如何使用常规格式的正则表达式解决这个问题?

感谢堆:)

1 个答案:

答案 0 :(得分:3)

您不能使用简单的正则表达式完全描述该语言。问题是任何字母都可以用表达式替换。您需要递归正则表达式,而Java的java.util.regex包不支持这些表达式。

据我所知,此功能始于Perl 4左右,并出现在一些宣传“ Perl兼容正则表达式”(PCRE)的程序包中。它不是标准Java,Python,Ruby,C ++的一部分,而且我也不相信C#,VB.Net,C ++ / CLI等的.NET库也有。