java正则表达式不匹配

时间:2016-03-08 15:54:43

标签: java regex

我想使用递归来分割字符串。我使用sting asd>=123来测试

在第一个,它成功,但在第二个,它进入其他条件。

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()

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

1 个答案:

答案 0 :(得分:0)

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

这意味着起始锚点和结束锚点是隐式的,可以排除。

所以,除非你的字符串是空的或者完全 那些字符
我不相信它会匹配。