形式逻辑格式的Java正则表达式
我希望将字符串与形式逻辑中的表达式格式相匹配,其中两个字母字符由v |^ |>;|=,其中字符前面可以加~|!|?,字符可能被括号包围,前面又加上~ |!|?。起初,我认为下面的表达式可以做到这一点:
s.matches("^[!?~]*[(]*[!?~]*[a-z]{1}\\s[v>=^]{1}\\s[!?~]*[a-z]{1}[)]*$")
然而,我已经意识到这些表达式可以相互叠加,我不知道如何在正则表达式中解释这一点
可接受匹配的示例:
~p v q
~?(p^~r)
!!p
pv~(!r^t)
~!(p=(~!q^t))
可以添加任意多的运算符,以创建非常长的表达式。我如何用一般格式的正则表达式解释这个问题
谢谢你:)
# 1 楼答案
用一个简单的正则表达式无法完全描述这种语言。问题是任何字母都可以用表达式替换。您需要递归正则表达式,而Java的
java.util.regex
包不支持递归正则表达式据我所知,这是一个从Perl4开始的特性,并且出现在一些宣传“Perl兼容正则表达式”(PCRE)的包中。它不是标准java、python、露比、C++的一部分,我不相信。NET库,VB。Net、C++/CLI等。也可以使用它