正则表达式(正则表达式)不起作用

时间:2018-06-16 07:04:16

标签: java expression

我正在试用正则表达式,我有一个问题: 我想检查一下块是否正确,意思是

if(a,){ 

会返回false 和

if(x, y){

会返回true 我出来了这个正则表达式:

(if|while)\s*(.*)\s*\{.*

但是在第一个例子中返回true,有人可以帮我解决这个问题吗?

由于 乔治

2 个答案:

答案 0 :(得分:1)

你的正则表达式的第一个问题是你忘了逃避括号:)。

在括号内,您只是匹配.*,这是除了行结尾之外的所有内容,这似乎并不是您想要的。

从你的例子中,我猜你想要匹配那些没有尾随或引导逗号的if语句。所以在括号内,这个正则表达式应该匹配:

\w+\s*(?:\s*,\s*\w+)*

说明:

如果我们删除所有\s*(它们只是允许无处不在的空格),我们就会得到

\w+(?:,\w+)*

基本上是单词字符,后跟一串逗号和单词字符" thingys。这样可以确保在结尾或开始时没有逗号,因为模式的结束和开始都是\w

我们可以将其替换为您的原始正则表达式:

(if|while)\s*\(\w+\s*(?:\s*,\s*\w+)*\)\s*\{.*

Demo

答案 1 :(得分:0)

欢迎使用Java的错误名称.matches()方法...它尝试并匹配所有输入。

如果您想查看正则表达式是否与输入文字匹配,请使用匹配器的PatternMatcher.find()方法:

Pattern p = Pattern.compile("[a-z]");
Matcher m = p.matcher(inputstring);
if (m.find())
    // match

如果你想要的确是输入只有小写字母,你可以使用.matches(),但是你需要匹配一个或多个字符:在你的角色类附加一个+,与[a-z]+中一样。或者使用^[a-z]+$.find()