我想为这个BNF语法编写preg_match函数。
EXP :: = EXP + TERM | EXP - TERM | TERM
TERM :: = TERM * FACTOR |期/因子|因子
FACTOR :: =(EXP)| DIGIT
DIGIT :: = 0 | 1 | 2 | 3
我试着用这种方式写它
$ pattern =“| [0-3 + - ()* /] + \ $$ |”;
但问题是,它接受字符串33 $,根据我的语法无效 所以按照我的语法1 + 22 $应该无效,因为数字应该是0 | 1 | 2 | 3.
我犯了什么错误?有人可以帮助我。
编辑:
实施例: 1 + 22 $应该是无效的字符串,因为我只想要数字0,1,2,3而不是任何数字> 3
谢谢。
答案 0 :(得分:1)
尝试这种模式吗?
/^([0-3][+-*/])+[0-3]\$$/
使用parenths的解决方案对于正则表达式来说并非无足轻重;
/^(\(?[0-3]\)?[+-*/])+[0-3]\)\$$/
允许您创建正确的表达式,如(2 + 3)$,但也错误(2 + 3 $
为此编写自己的词法分析器