【问题标题】:Why does my regex expression match every character?为什么我的正则表达式匹配每个字符?
【发布时间】:2015-11-09 18:42:59
【问题描述】:

我想排除除字母和数字之外的任何字符,但是当我运行程序时,无论我输入什么,我总是进入 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("请输入下一位舞者的名字");

如果我输入“%”也是一样的

【问题讨论】:

  • 只是语义,但只要我们说的是十进制数,除了0到9之间还有其他数字吗? :)

标签: java regex


【解决方案1】:

/i 不会让它在 Java 中忽略大小写,使用:

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

或者简单地说:

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

您方法中的另一个问题是,默认情况下 ^ 匹配文本开头,而不是行首,因此如果您的第一个输入与正则表达式不匹配,那么下一个输入也无法匹配它,因为它不会在文本的开头。因此,要么使您的锚点与多行标志 (?m) 的行首匹配,要么直接删除 ^

【讨论】:

  • 好的,谢谢,但不管我输入什么,我仍然会进入while循环。
  • 你是如何测试它的? !scan.hasNext("^[a-zA-Z0-9]+$")如果输入a则返回false
  • @JerryMurphy 从您的正则表达式中删除 ^ 锚点。如果您的第一个值不正确,那么它肯定不会在到目前为止读取的整个文本扫描仪的开头,这意味着^ 会阻止您匹配任何输入。你也可以在你的正则表达式中添加多行标志,让这个锚点代表 line 的开始。
  • @JerryMurphy 不需要第二个答案。我对此添加了解释(希望你不介意@anubhava)。
  • @Pshemo:非常感谢您的评论和编辑答案。抱歉,我离开了几分钟,所以无法自己编辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-22
  • 2018-08-24
相关资源
最近更新 更多