我想要创建一个正则表达式,它能够为我匹配一些逻辑公式,以验证输入。
基本上,我将有一个数字(0-100),一个关键字(和/OR)和括号。
因此,我应该能够匹配这类用例:
1 AND 2
(1 AND 2) OR 3
1 AND (2 OR 3)
(1 AND 2) OR (3 AND 4)
1 AND (2 OR (3 AND (4 OR 5)))我不需要验证它最简单的形式(比如阻止用户编写(1 AND (2 AND 3)) )。
到目前为止,我已经创建了以下内容:
\(?(\d+)\s+(AND|OR)\s+\d+\)?但我被困在几件事上:
\d+或者整个表达式都是相同的发布于 2021-05-04 07:29:29
Regex -是一种规则语法。它解析规则的、通常是非递归的结构,一般并不意味着解析递归结构,如: JSON、HTML、数学表达式、布尔表达式、C++、C#、Java等。它只是不适合其他类型的语法,regex工作在有限状态自动机上,而您的任务涉及上下文(这就是为什么需要堆栈),因此您应该使用下一级的语法层次结构:
您通常需要使用带有堆栈的硬编码自动机(如注释中的建议),或者使用框架根据LR/LL语法解析输入: ANTLR、Gold、pegasus等。
例如,antlr有一吨语法:github.com/antlr/gramars-v4。如果再深入研究语法,你会发现你的问题在多个语法中都有答案:
https://github.com/antlr/grammars-v4/blob/master/arithmetic/arithmetic.g4
https://stackoverflow.com/questions/67380079
复制相似问题