【发布时间】:2025-11-24 09:30:01
【问题描述】:
表达式为:
N | ( 1 { A | B | C | D | E1 | E2 | E3 } )
表示描述符“N”或列出的描述符中的一个或多个,不重复。
我得到的最好的是:
@"^(N|(A|B|C|D|E1|E2|E3){1,})$"
但这并不能防止重复。
@"^(N|(A{0,1}B{0,1}...)$"
这可以防止重复,但随后需要元素的特定顺序,这也不是很好。
有什么想法吗?
(我实际上不确定 bnf 表达式本身是否不允许重复,但这正是我所需要的。)
【问题讨论】:
-
kore-nordmann.de/blog/do_NOT_parse_using_regexp.html 使用正则表达式来识别单词,而不是结构。
-
我想这是有道理的。但是我会用什么来识别这个结构呢? @DavidBrabant 它将用于验证上述表单的输入。
-
或者PCRE是你建议的方法?
-
根据你的“A”,“B”的复杂性......我想我会写一个下降解析器。
-
其实一点也不复杂。 (对不起,如果我的问题表述得很糟糕)。允许用户输入例如“N”、“A”、“B”或“AB”,但不能输入“AA”或“BB”。字母本身就是这样。因此,问题是验证该输入。我写的两个正则表达式确实部分验证了这些情况,认为不完全如问题中所述。