我正在创建一个带有文件并检查它是否是有效Java代码的代码,必须使用正则表达式完成。
我跑过每一行并检查它是否以;或{或}。 但是,我似乎无法将其限制为只发生一次。 即 两个
int i=0;
和
int i=0 ;;;;;;;
会通过.. 我正在使用的正则表达式是
.+;{1}\\s*$
尝试了许多其他选项,非似乎工作。 任何帮助都会很棒! 感谢
答案 0 :(得分:1)
您的问题是.
也会与分号匹配,因此您的表达式将匹配除.+
之外的最后一个分号以外的所有分号。
为避免这种情况,您可以使用[^;]
匹配除分号之外的任何字符。即。
[^;]+;\\s*$
但是,您应该知道int i=0 ;;;;;;;;;
是完全有效的Java代码。
答案 1 :(得分:0)
如果你想确保整行中只有一个分号,那么使用:
^[^;]+;{1}\\s*$
但这不是对有效Java源的正确检查。
答案 2 :(得分:0)
正则表达式的这一部分:.+
将匹配任何字符,包括;
的最后一个字符。
您需要从正则表达式的第一部分中排除;
,以便您可以匹配“除了a之外的任何内容;后跟恰好一个;” (一旦你开始工作,你可以扩展你的角色类,如果你愿意,也可以捕捉{和}
HTH