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