首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何生成递归Regex

如何生成递归Regex
EN

Stack Overflow用户
提问于 2021-05-04 06:54:48
回答 1查看 273关注 0票数 0

我想要创建一个正则表达式,它能够为我匹配一些逻辑公式,以验证输入。

基本上,我将有一个数字(0-100),一个关键字(和/OR)和括号。

因此,我应该能够匹配这类用例:

代码语言:javascript
运行
复制
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)) )。

到目前为止,我已经创建了以下内容:

代码语言:javascript
运行
复制
\(?(\d+)\s+(AND|OR)\s+\d+\)?

但我被困在几件事上:

  1. 有什么方法可以用regex(在C#中)做递归的事情吗?因为我不应该限制括号级别。目标是让\d+或者整个表达式都是相同的
  2. 我不知道如何强制执行,如果添加了一个开括号,我也应该有一个结束括号?
EN

回答 1

Stack Overflow用户

发布于 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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67380079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档