JAVA里使用正则表达式判断一个字符串是否是赋值表达式.例如: a2=0;a2=b;都是,但2a=0;a2==a2;a2=2a;就不是,也就是说要判断左值(右值)是否合法

解决方案 »

  1.   

    你要完整的,呵呵,工程大了
    我举个例子
    String xxx = "a = 0" ; String yyy = "b = 0";上面2个也不是赋值表达式,而是一个字符串,用正则表达式几乎无法判断,还要计算本行中的双引号呢。如果要写一个完整的要考虑好多情况呢。
      

  2.   

    [_A-Za-z]+(\s)*(=){1}(\s)*[_A-Za-z0-9]+
    判断一个"字符串是否是赋值表达式"
    我想应该能做到了
      

  3.   

    楼山的是吗?int b = 0;
    boolean a = (b == 0);那你的正在表达式能不能判断
    boolean a = (b == 0);
    这个赋值表达式呢?
      

  4.   

    谢谢 iouzhui(从来不改变)的热心解答,也谢谢其他几位  刚测试了一下,发现您的表达式还有几个问题:
    1. 上面括号里的\s不能通过编译,我把他换成\t可以,但这样就只能判断Tab而不能判断空格
    2.  变量首位不能是数字,(这个没判断),
    3. 对于 dunne() 的问题,iouzhui(从来不改变) 的表达式是可以区分==以及()(甚至你提出的")
      

  5.   

    楼上的不能用split先把他截成2段在考虑吗?  
    ([a-zA-Z])*=(0-9)*
    这个行不行啊?
      

  6.   

    回 newplayerone() 用Split(),那分割符用什么("="? "=="?) 
    还有你上面的表达式不能满足,参见 iouzhui (8)兄的,我等下修改好,也贴出来
      

  7.   

    对于 dunne() 的问题,iouzhui(从来不改变) 的表达式是可以区分==以及()(甚至你提出的")你有没有测过呀,大哥
    [_A-Za-z]+(\s)*(=){1}(\s)*[_A-Za-z0-9]+
    这个对于
    boolean a = (b == 0);
    根本就找不到!
    至于"问题,就更不用说了
    要计算本行复制表达式前的引号次数,同时还要判断是不是\"这种转意引号。这只是最简单的要处理的,还没有算上如果赋值表达中含有注释的情况。
      

  8.   

    呵呵,dunne()想的真广,我只要简单的判断是不是类似A=B的赋值表达式,谢谢你的思路.
    不过还有个问题,就刚刚说的\s 在我这里编译是 illegal escape character,怎么判断他有多个空格呢
      

  9.   

    [_A-Za-z]+(\\s)*(=){1}(\\s)*[_A-Za-z0-9]+