2016-03-08 111 views
-4

我想用递归拆分字符串。我用刺asd>=123在第一位的,它的成功测试java的正则表达式匹配

,但在第二个,它进入else条件。

s可以是 “123> = ASD;”, “123 + 456”, “654 * 123”

boolean SplitString(String s) { 

    if (s.matches("^\\d+.*")) { // number   
     parser.Add(s.substring(0, subindex)); 
     if (subindex == s.length()) 
     return true; 
     returnType = SplitString(s.substring(subindex, s.length())); 
     return returnType; 
    } // if 
    else if (s.matches("^(<|>|<>|:=|=|;|<=|>=|\\+|-|\\*|/.)*")) { // operator 
     subindex = SplitSign(s); 

     parser.Add(s.substring(0, subindex)); 
     if (subindex == s.length()) 
     return true; 
     returnType = SplitString(s.substring(subindex, s.length())); 
     return returnType;  
    } // else if 
    else if (s.matches("^_?\\w+.*")) { // variable 
     for (int i = 0 ; i < s.length() ; i++) { 
     if (!Character.isAlphabetic(s.charAt(i)) && !Character.isDigit(s.charAt(i)) && s.charAt(i) != '_') { 
      subindex = i; 
      i = s.length(); // break loop 
     } // if 
     } // for 


     parser.Add(s.substring(0, subindex)); 
     if (subindex == s.length()) 
     return true; 
     returnType = SplitString(s.substring(subindex, s.length())); 
     return returnType;  
    } // else if 
    else { // not above 
     return false; 
    } // else 
    } // SprlitString() 

但它没有工作。我错过了什么?

+2

一对括号? – Tunaki

+0

我以前尝试过,但它可以不匹配('^(<=)|(> =)|(<>)|(:=)|(=)|(;)|(<)|(>)|(\ +)|( - ) |(\ *)|(/).*') – James

+0

显示您的代码。 “它不起作用”也不是一个非常明确的问题陈述。 – tnw

回答

0

你的正则表达式减少了(?:[-*+;=<>]|:=|/.)*,但是我相信
matches方法必须整个字符串相匹配。

这意味着起始和结束锚是隐式的,并且可以被排除在外。

所以,除非您的字符串为空或包含完全这些字符
我不相信它会匹配。

+0

谢谢你回答我的坏问题... – James

+2

欢迎你。不过没问题。继续尝试。 – sln