我现在有一四则运算表达式,需要将各运算数据提出来,请高手们指点,如以下运算式 
中国/日本+(${进货/出货}+${日均量-按天算})-(美国*(韩国-朝鲜))*(M5-F8),通过正则运算按顺序提出 
中国,日本,${进货/出货},${日均量-按天算},美国,韩国,朝鲜,M5,F8, 还要通过另一正则表达式提出运算符 /,+(,+,)-(,*(,-,))*(,-,) 注意:${进货/出货}, ${日均量-按天算} 为数据项,里面带的‘/’,‘-’符号不能做为运算符,也就是要求${}格式的里面可以放任何内容,只能做为数据项往外提, 运算表达式格式不固定,符合四则运算加括号。 求高手们用java给两个正则表达式

解决方案 »

  1.   


    Pattern pattern = Pattern.compile("[/+-[(][*][)]]+");
    String[] strs = pattern.split("中国/日本+(${进货/出货}+${日均量-按天算})-(美国*(韩国-朝鲜))*(M5-F8)");
    for (int i=0;i<strs.length;i++) {
        System.out.println(strs[i]);
    } 楼主,本人正则有限只能解决到这一步,但是${进货/出货}作为整理不能取出。
    等待高人吧。
      

  2.   

    不是很明白lz需要提取的是什么。
    如果只是汉字和运算符号组成的字符串,或者只是数字和运算符号组成的字符串,都还好说。
    lz最好能够说得明白一点。
    比如上面的“中国”,是要提取“中国”这两个汉字,还是提取“中国”所代表的数字,比如12.5之类。
      

  3.   

    我是菜鸟,试着不一个:
    import java.util.regex.*;
    public class Test {
    public static void main(String[] args) {
    // TODO 自动生成方法存根

    String s="中国/日本+(${进货/出货}+${日均量-按天算})-(美国*(韩国-朝鲜))*(M5-F8)";
    //提取操作数
    System.out.println("提取的操作数如下:");
    Pattern p = Pattern.compile("(([^(*/)+-[*]/()${}]+)|(\\$\\{.+?\\}))");
            Matcher m=p.matcher(s);
            while(m.find())
            {
             System.out.print(m.group()+",");
            }        //      提取运算符
            System.out.println("\n提取的运算符如下:");
            s=s.replaceAll("(\\$\\{.+?\\})", "");        
             p = Pattern.compile("([(*/)+-[*]/()])");
             m=p.matcher(s);
            while(m.find())
            {
             System.out.print(m.group()+",");
            }
    }}
    程序运行结果:
    提取的操作数如下:
    中国,日本,${进货/出货},${日均量-按天算},美国,韩国,朝鲜,M5,F8,
    提取的运算符如下:
    /,+,(,+,),-,(,*,(,-,),),*,(,-,),
      

  4.   

    有没有人用split搞出结果来呢?