我正在试用正则表达式,我有一个问题: 我想检查一下块是否正确,意思是
if(a,){
会返回false 和
if(x, y){
会返回true 我出来了这个正则表达式:
(if|while)\s*(.*)\s*\{.*
但是在第一个例子中返回true,有人可以帮我解决这个问题吗?
由于 乔治
答案 0 :(得分:1)
你的正则表达式的第一个问题是你忘了逃避括号:)。
在括号内,您只是匹配.*
,这是除了行结尾之外的所有内容,这似乎并不是您想要的。
从你的例子中,我猜你想要匹配那些没有尾随或引导逗号的if语句。所以在括号内,这个正则表达式应该匹配:
\w+\s*(?:\s*,\s*\w+)*
说明:
如果我们删除所有\s*
(它们只是允许无处不在的空格),我们就会得到
\w+(?:,\w+)*
基本上是单词字符,后跟一串逗号和单词字符" thingys。这样可以确保在结尾或开始时没有逗号,因为模式的结束和开始都是\w
。
我们可以将其替换为您的原始正则表达式:
(if|while)\s*\(\w+\s*(?:\s*,\s*\w+)*\)\s*\{.*
答案 1 :(得分:0)
欢迎使用Java的错误名称.matches()
方法...它尝试并匹配所有输入。
如果您想查看正则表达式是否与输入文字匹配,请使用匹配器的Pattern
,Matcher
和.find()
方法:
Pattern p = Pattern.compile("[a-z]");
Matcher m = p.matcher(inputstring);
if (m.find())
// match
如果你想要的确是输入只有小写字母,你可以使用.matches()
,但是你需要匹配一个或多个字符:在你的角色类附加一个+
,与[a-z]+
中一样。或者使用^[a-z]+$
和.find()
。