java正则表达式不匹配

java正则表达式不匹配,java,regex,Java,Regex,我想使用递归来分割字符串。我使用stingasd>=123进行测试 在第一种情况下,它成功了,但在第二种情况下,它进入了其他条件 s可以是“123>=asd;”、“123+456”、“654*123” 布尔拆分字符串(字符串s){ 如果(s.matches(“^\\d+.*){//number Add(s.substring(0,subindex)); if(子索引==s.length()) 返回true; returnType=SplitString(s.substring(subindex,

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

在第一种情况下,它成功了,但在第二种情况下,它进入了其他条件

s
可以是“123>=asd;”、“123+456”、“654*123”

布尔拆分字符串(字符串s){
如果(s.matches(“^\\d+.*){//number
Add(s.substring(0,subindex));
if(子索引==s.length())
返回true;
returnType=SplitString(s.substring(subindex,s.length());
返回类型;
}//如果
else如果(s.matches(“^(| |:=|=|=| |=|-| \*./)*”){//运算符
子索引=拆分符号;
Add(s.substring(0,subindex));
if(子索引==s.length())
返回true;
returnType=SplitString(s.substring(subindex,s.length());
返回类型;
}//否则如果
else如果(s.matches(“^\u?\\ w+.*){//变量
对于(int i=0;i

但它不起作用。我错过了什么?

您的正则表达式简化为
(?:[-*+;=].*:=./.)*
,但我相信
匹配
方法必须匹配整个字符串

这意味着起点和终点锚点是隐式的,可以排除

因此,除非字符串为空或完全包含这些字符

我不相信它会匹配

几个圆括号?我以前试过,但它不能匹配(
^(=)(124)(:=)(124)(=)(=)(124)()(124+)(124)()(\*)(124/).
)显示您的代码。“它不起作用”也不是一个很清楚的问题陈述。因为您包括开始锚定
^
,所以您需要将其从选项中排除,即使用如下偏执:
^(|…).
。除此之外,如果你能接受一些误报,你也许可以简化你的表达式,例如,你可以使用像
^[:=;\+\*/][>=]?.
-这将匹配字符串,比如
==
+>
,但不确定你是否想要。当你说“它不工作”,你的意思是“它不编译吗?”或者你实际拥有的代码与你发布的代码不同?欢迎光临。毫无疑问,这是不好的。继续努力。
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()