2.5正则表达式进阶
正则表达式的功能相当强大
Java 提供Pattern,Matcher类
Pattern:代表正则表达式本身
对正则进行预先编译处理
提高处理的效率
Matcher:代表正则匹配的结果
实现更加复杂的管理
如:进行子组的管理
四则运算-括号优先
Pattern
Matcher
串 解析
运算符操作数
运算符运算的先后次序关系
正常思路:双栈求解四则运算(逆波兰表达式)
这里不讨论逆波兰表达式,仅仅用正则来解决,虽然效率可能不是最高的
最内层括号先求值,获得最内层括号,正则匹配问题
String s = “2+3*(5*(12-6))”;
Pattern pt = Pattern.compile()
/* * 带有括号的计算 * 求四则运算表达式的值 Pattern Matcher 只有加减乘。除法具有特殊性 */ package RegularExpression; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Equation { public static void main(String[] args) { String s = "2+3*(5*(12-6))"; Pattern pt = Pattern.compile("\\(([^\\(\\)]*)\\)"); Matcher m = pt.matcher(s); if(m.find()){ System.out.println(m.group(1));//直接提取子组 System.out.println(m.start()); System.out.println(m.end()); } } }
12-6 7 13
|
|
|
|
|
|
|
|
|
|
|
|
|
|
四则运算-没有括号乘法优先
@H_403_185@package RegularExpression; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Equation2 { public static void main(String[] args) { String s = "2+3*15*2-7"; Pattern pt = Pattern.compile("([0-9]+)(\\*)([0-9]+)"); Matcher m = pt.matcher(s); if(m.find()){ System.out.println(m.group()); System.out.println(m.group(1)); System.out.println(m.group(2)); System.out.println(m.group(3)); } } }
3*15 3 * 15