正则表达式之合法多项式的检验

Posted object-oriented-design-and-ana

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式之合法多项式的检验相关的知识,希望对你有一定的参考价值。

(1)相关概念说明
? 带符号整数:前导不为 0 的带符号整数,如果是正号,可以省略,例如-2,、+23、34442409
等。
? 幂函数:由自变量 x(只支持小写)和指数组成,指数为一个带符号整数,如 x^-2、x^+25。
当指数为 1 时,可以省略指数,如 x。
? 项:具体包括变量项和常数项。
? 变量项是指带有系数的幂函数,如 2*x^2、-1*x^12;
? 系数为 1 时的时候,可以省略系数或表示为正号开头的形式,如 x^-2;
? 系数为-1 时的时候,可以表示为符号开头的形式,如-x^3。
? 常数项包含一个带符号整数,例如:233。
? 表达式:由加法和减法运算符连接若干项组成,如:-1+x^20-x^-6。注意,表达式中空串不
属于合法的表达式,另外,系数与指数均不能为 0。
? 空白字符:在本次作业中,空白字符仅限于空格<space>。
? 此外,带符号整数内不允许出现空白字符,其他位置均可以存在空白字符。

输入示例 1:
-2*x^-2+5*x^12-4*x+12

输出示例 2:

Right

输入示例 2:
2*x^6-0*x^7+5
3 / 4
输出示例 2:
Wrong Format

(2)首先我们先把多项式分成多种特殊情况:

0、匹配首项系数为1、指数可能存在;x(\^[+-]?([1-9][0-9]*))?)

1、匹配首项带正系数且不为1、指数可能存在;([1-9][0-9]*)(\*x(\^[+-]?([1-9][0-9]*))?) 

2、匹配首项或非首项、系数不为1、指数可能存在;[-+]([1-9][0-9]*)(\*x(\^[+-]?([1-9][0-9]*))?)

3、匹配首项或非首项、系数为1、指数可能存在;[-+](x(\^[+-]?([1-9][0-9]*))?)

4、匹配首项或非首项常数;[-+]([1-9][0-9]*)

5、匹配首项为常数;([1-9][0-9]*)

6、在表达式开始加^且末尾加$表示多次重复出现

    public boolean isPolynomial() {//判断是否为合法多项式
        if (data.matches("^(([-+]([1-9][0-9]*)(\*x(\^[+-]?([1-9][0-9]*))?))|(([1-9][0-9]*)\*(x(\^[+-]?([1-9][0-9]*))?))|([-+](x(\^[+-]?([1-9][0-9]*))?))|([-+]([1-9][0-9]*))|(([1-9][0-9]*))|((x(\^[+-]?([1-9][0-9]*))?)))+$"))
            return true;
        else
            return false;    
    }

 

以上是关于正则表达式之合法多项式的检验的主要内容,如果未能解决你的问题,请参考以下文章

如何实现用正则表达式判断输个入的姓名是不是合法(中文,2-7个汉字)

JS的正则表达式

自己动手写编译器:汤普森构造法

自己动手写编译器:汤普森构造法

怎么用ajax和js检验用户名是不是合法和不能为空

js之正则表达式基础