preg_match只有一些数字

时间:2013-05-10 05:10:14

标签: php preg-match

我想为这个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

谢谢。

1 个答案:

答案 0 :(得分:1)

尝试这种模式吗?

/^([0-3][+-*/])+[0-3]\$$/

使用parenths的解决方案对于正则表达式来说并非无足轻重;

/^(\(?[0-3]\)?[+-*/])+[0-3]\)\$$/

允许您创建正确的表达式,如(2 + 3)$,但也错误(2 + 3 $

为此编写自己的词法分析器