有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

形式逻辑格式的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) 个答案

  1. # 1 楼答案

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

    据我所知,这是一个从Perl4开始的特性,并且出现在一些宣传“Perl兼容正则表达式”(PCRE)的包中。它不是标准java、python、露比、C++的一部分,我不相信。NET库,VB。Net、C++/CLI等。也可以使用它