【问题标题】:Java Regex for formal Logic format用于正式逻辑格式的 Java 正则表达式
【发布时间】:2018-12-06 03:07:15
【问题描述】:

我希望将字符串与形式逻辑中的表达式格式匹配,其中两个字母字符由 v|^|>|= 操作,其中字符前面可以有 ~|!|?,以及字符可能会被括号包围,并再次以 ~|!|? 开头。一开始我以为下面的表达式可以做到:

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

但是,我意识到这些表达式可以相互叠加,我不知道如何在正则表达式中解释这一点。

可接受的匹配示例:

~pvq

~?(p ^ ~r)

!p

p v ~(!r ^ t)

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

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

谢谢大家:)

【问题讨论】:

  • FTLOG 为什么? FWIW,我认为这是不可能的。

标签: java regex format logic


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多