preg_match 只匹配一些数字

问题描述 投票:0回答:2

我想为这个 BNF 语法编写 preg_match 函数。

EXP ::= EXP + TERM | EXP - 术语 |学期

学期 ::= 学期 * 因子 |学期/因素 |因子

因子 ::= ( EXP ) |数字

数字:= 0 | 1 | 2 | 3

我试着这样写

$pattern = "|[0-3+-()*/]+\$$|";

但问题是,它接受字符串 33$,根据我的语法这是无效的 所以根据我的语法 1+22$ 应该是无效的,因为数字应该是 0|1|2|3.

我犯了什么错误?有人可以帮帮我吗?

编辑:

例子: 1+22$ 应该是无效的字符串,因为我只想要数字 0,1,2,3 而不是任何数字 > 3

谢谢。

php preg-match
2个回答
1
投票

试试这个图案?

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

带括号的解决方案对于正则表达式来说不是微不足道的;

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

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

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


0
投票

preg_match("/[^.\d]/i", "text123");

结果 - 123

© www.soinside.com 2019 - 2024. All rights reserved.