preg_match只有一些数字
问题描述:
我想为这个BNF语法编写preg_match函数。preg_match只有一些数字
EXP :: = EXP + TERM | EXP - TERM | TERM
TERM :: = TERM * FACTOR | TERM/FACTOR | FACTOR
FACTOR :: =(EXP)| DIGIT
DIGIT :: = 0 | 1 | 2 | 3
我试图这种方式写
$图案= “| [0-3 + - ()* /] + \ $$ |”;
,但这样做的问题是,它接受字符串33 $这是无效的按我的语法 所以按我的语法1个+ $ 22不应该无效的,因为数字应该为0 | 1 | 2 | 3。
我正在犯什么错误?有人能帮帮我吗。
编辑:
例: 1 + 22 $应该是无效的字符串,因为我只想号0,1,2,3,但没有任何数量> 3
谢谢。
答
试试这种模式?
/^([0-3][+-*/])+[0-3]\$$/
父母对于正则表达式的解决方案并不平凡;
/^(\(?[0-3]\)?[+-*/])+[0-3]\)\$$/
允许您创建像右表达式(2 + 3)$,但也是错误的(2 + 3 $
写自己的词法分析器该
给你有什么&为例你想要什么输出? – Rikesh 2013-05-10 05:14:05
为什么不直接运行tokenizer/parser并查看它解析是否正确?Regex是一个很差的解析替代品。 – Patashu 2013-05-10 05:18:32