为什么我的正则表达式与每个字符匹配?

时间:2015-11-09 18:43:00

标签: java regex

我想排除除字母和数字之外的任何字符,但是当我运行程序时无论输入什么,我总是进入while循环。

System.out.println("Please enter the name of the next dancer");

while(!scan.hasNext("^[a-z0-9]+$/i"))
{

    System.out.println("Please ensure you only enter letters of the alphabet and numbers bewteen 0 and 9");
    scan.nextLine();

}
arrCelebs[celeb] = scan.next();

例如我输入“a”我得到 - System.out.println(“请输入下一位舞者的名字”);

如果我输入“%”

,则相同

1 个答案:

答案 0 :(得分:2)

/i不会忽略Java中的大小写,请使用:

"(?i)^[a-z0-9]+$"

或者简单地说:

"^[a-zA-Z0-9]+$"

你的方法中的另一个问题是,默认情况下^匹配文本的开头,而不是行的开头,所以如果你的第一个输入与正则表达式不匹配,那么下一个输入也不能匹配它,因为它不会在文本的开头。因此,要么让你的锚点符合多行标记(?m)的行首,要么只删除^