Java 正则表达式限制为一个分号
我正在制作一个代码,它接受一个文件并检查它是否是有效的Java代码,必须使用正则表达式来完成 我检查每一行,看它是否以;或{或}。 然而,我似乎无法将其限制为仅出现一次。 即 两者 及 会过去的。。 我现在使用的正则表达式是Java 正则表达式限制为一个分号,java,regex,Java,Regex,我正在制作一个代码,它接受一个文件并检查它是否是有效的Java代码,必须使用正则表达式来完成 我检查每一行,看它是否以;或{或}。 然而,我似乎无法将其限制为仅出现一次。 即 两者 及 会过去的。。 我现在使用的正则表达式是 .+;{1}\\s*$ 尝试了许多其他的选择,非似乎有效。 任何帮助都会很好! 谢谢如果要确保整行中只有一个分号,请使用: ^[^;]+;{1}\\s*$ 然而,这并不是对有效java源代码的正确检查 这部分regexp:+将匹配任何字符,包括除最后一个以外的所有字符
.+;{1}\\s*$
尝试了许多其他的选择,非似乎有效。
任何帮助都会很好!
谢谢如果要确保整行中只有一个分号,请使用:
^[^;]+;{1}\\s*$
然而,这并不是对有效java源代码的正确检查 这部分regexp:
+
将匹配任何字符,包括除最后一个以外的所有字符代码>
您需要排除代码>从regexp的第一部分开始,这样您就可以匹配“除a之外的任何内容;后面紧跟着一个;”(一旦您开始工作,您可以扩展您的角色类来捕获{和},如果您愿意的话)
HTH您的问题是
也将匹配分号,因此表达式将匹配除最后一个分号以外的所有分号,作为+
的一部分
为了避免这种情况,您可以使用[^;]
匹配除分号以外的任何字符。i、 e
[^;]+;\\s*$
但是,您应该知道inti=0
是完全有效的Java代码。阅读贪婪正则表达式匹配(或贪婪量词)。什么是不正确的检查?Java文件可以包含不以{}或结尾的行;它们可以在行后面加上更多的分号,以此类推。这比你用几个字符的regexp写下来要复杂得多。哦,这个。是的,我知道。但在练习中,我们不需要检查这些东西。我们需要编写一个简化的Java编译器,它使用正则表达式来验证代码。S-Java没有这些问题。
^[^;]+;{1}\\s*$
[^;]+;\\s*$