正则表达式之合法多项式的检验
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; }
以上是关于正则表达式之合法多项式的检验的主要内容,如果未能解决你的问题,请参考以下文章