Java Regex required:它应该与以下模式匹配

Java Regex required:它应该与以下模式匹配,java,regex,Java,Regex,有效期: ((int)10) (int)10 ((char)((x+y)和1)) ((int*)1) 无效: (a-b) (a&=b) a ((a)) (平衡的)括号表达式的语言是非正则的,也就是说,您不能编写与此类字符串匹配的正则表达式 见和 您需要使用一种更强大的解析技术,例如使用CFG 您可以从以下内容开始: CastedExpression ::= Cast Expression | LPAR CastedExpression RPAR Cast ::= LPAR

有效期:

  • ((int)10)
  • (int)10
  • ((char)((x+y)和1))
  • ((int*)1)
  • 无效:

  • (a-b)
  • (a&=b)
  • a
  • ((a))
  • (平衡的)括号表达式的语言是非正则的,也就是说,您不能编写与此类字符串匹配的正则表达式

    见和

    您需要使用一种更强大的解析技术,例如使用CFG

    您可以从以下内容开始:

    CastedExpression ::= Cast Expression | LPAR CastedExpression RPAR
    Cast             ::= LPAR Type RPAR
    Expression       ::= Sum | Product | Litteral | LPAR Expression RPAR | ...
    Type             ::= char | int | Type ASTERISK | ...
    
    (如果您发现任何明显的改进,请随意编辑上面的语法)。

    括号内的(平衡的)表达式的语言是非正则的,即,您无法编写与此类字符串匹配的正则表达式

    见和

    您需要使用一种更强大的解析技术,例如使用CFG

    您可以从以下内容开始:

    CastedExpression ::= Cast Expression | LPAR CastedExpression RPAR
    Cast             ::= LPAR Type RPAR
    Expression       ::= Sum | Product | Litteral | LPAR Expression RPAR | ...
    Type             ::= char | int | Type ASTERISK | ...
    

    (如果您发现任何明显的改进,请随意编辑上面的语法)。

    添加到aioobe的答案中:


    看起来您正在尝试编写表达式解析器。正如在另一个答案中已经说过的,不可能使用正则表达式。您应该考虑使用表达式解析器,例如JEP或自己编写一个JavaCc.< /P>< P> >添加到AIOOBE的答案:

    看起来您正在尝试编写表达式解析器。正如在另一个答案中已经说过的,不可能使用正则表达式。您应该考虑使用表达式解析器,例如JEP或使用JavaCc编写一个。

    < P>: 语言(平衡) 括号内的表达式不适用 常规,也就是说,你不能写 匹配这些参数的正则表达式 一种弦

    只有病理形式意义上的经典正则表达式才是如此。它不适用于我们许多人日常使用的实际模式

    例如,使用原始有效输入列表中的第三个字符串,以下Perl代码:

    my $str = "((char)((x+y)&1))";
    my $w   = length length $str ;
    my $rx  = qr{ (?<PAREN>
                    \(
                       (?:
                           [^()] +
                         |
                           (?&PAREN)
                       ) *
                    \)
                  )
              }x;
    
    while ($str =~ /(?=$rx)/g) {
        printf "Matched from %*d to %*d: %s%s\n" =>
            $w => pos($str),
            $w => pos($str) + length($+{PAREN})-1,
            " " x pos($str)   =>     $+{PAREN};
    }
    
    我无法通过观察原始输入集来判断是什么使一个有效,另一个无效。尽管如此,我相信对我上面给出的代码的一些详细说明将非常有效

    然而,您必须用Perl编写它,因为Java的模式还不够强大。☹

    这句话:

    语言(平衡) 括号内的表达式不适用 常规,也就是说,你不能写 匹配这些参数的正则表达式 一种弦

    只有病理形式意义上的经典正则表达式才是如此。它不适用于我们许多人日常使用的实际模式

    例如,使用原始有效输入列表中的第三个字符串,以下Perl代码:

    my $str = "((char)((x+y)&1))";
    my $w   = length length $str ;
    my $rx  = qr{ (?<PAREN>
                    \(
                       (?:
                           [^()] +
                         |
                           (?&PAREN)
                       ) *
                    \)
                  )
              }x;
    
    while ($str =~ /(?=$rx)/g) {
        printf "Matched from %*d to %*d: %s%s\n" =>
            $w => pos($str),
            $w => pos($str) + length($+{PAREN})-1,
            " " x pos($str)   =>     $+{PAREN};
    }
    
    我无法通过观察原始输入集来判断是什么使一个有效,另一个无效。尽管如此,我相信对我上面给出的代码的一些详细说明将非常有效


    然而,您必须用Perl编写它,因为Java的模式还不够强大。☹

    这是否有效:
    ((char)((x+y)
    ?这是否有效:
    ((x+y)
    ?如果可以提供语法,则条件+1。如果可以提供语法,则条件+1。