我希望将字符串与形式逻辑中的表达式格式匹配,其中两个字母字符通过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))
可以根据需要添加任意多个运算符,以创建一个非常长的表达式。如何使用常规格式的正则表达式解决这个问题?
感谢堆:)
答案 0 :(得分:3)
您不能使用简单的正则表达式完全描述该语言。问题是任何字母都可以用表达式替换。您需要递归正则表达式,而Java的java.util.regex
包不支持这些表达式。
据我所知,此功能始于Perl 4左右,并出现在一些宣传“ Perl兼容正则表达式”(PCRE)的程序包中。它不是标准Java,Python,Ruby,C ++的一部分,而且我也不相信C#,VB.Net,C ++ / CLI等的.NET库也有。