正则表达式限制为一个分号

时间:2012-04-25 15:48:30

标签: java regex

我正在创建一个带有文件并检查它是否是有效Java代码的代码,必须使用正则表达式完成。

我跑过每一行并检查它是否以;或{或}。 但是,我似乎无法将其限制为只发生一次。 即 两个

int i=0;

int i=0 ;;;;;;;

会通过.. 我正在使用的正则表达式是

.+;{1}\\s*$

尝试了许多其他选项,非似乎工作。 任何帮助都会很棒! 感谢

3 个答案:

答案 0 :(得分:1)

您的问题是.也会与分号匹配,因此您的表达式将匹配除.+之外的最后一个分号以外的所有分号。

为避免这种情况,您可以使用[^;]匹配分号之外的任何字符。即。

[^;]+;\\s*$

但是,您应该知道int i=0 ;;;;;;;;;是完全有效的Java代码。

答案 1 :(得分:0)

如果你想确保整行中只有一个分号,那么使用:

^[^;]+;{1}\\s*$

但这不是对有效Java源的正确检查。

答案 2 :(得分:0)

正则表达式的这一部分:.+将匹配任何字符,包括;的最后一个字符。

您需要从正则表达式的第一部分中排除;,以便您可以匹配“除了a之外的任何内容;后跟恰好一个;” (一旦你开始工作,你可以扩展你的角色类,如果你愿意,也可以捕捉{和}

HTH