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