【问题标题】:regex see if lowercase exists [duplicate]正则表达式查看小写是否存在[重复]
【发布时间】:2015-03-07 03:32:52
【问题描述】:

我还在学习正则表达式。

我正在尝试检查字符串是否包含任何小写值。如果是这样,我只想返回 false。

我在这里阅读了答案,但它们似乎在我的程序中不起作用,然而,它们在在线正则表达式模拟器中工作。

if (str.matches("[a-z]+"){
System.out.println("removed");
return false;

这似乎突出了正则表达式中的小写字母,但在我的程序中没有。有什么帮助吗?

【问题讨论】:

  • .matches 将检查整个字符串是否与正则表达式匹配,而不是正则表达式是否与某些子字符串匹配。你可能想要.*[a-z].* 在java中你也可以做!str.toUpperCase().equals(str)
  • 你问的最后一个问题的答案之一解释了为什么这不起作用。

标签: java regex string


【解决方案1】:

如果您只是在寻找@Adrian Leonhard 提供的正确正则表达式本身.*[a-z].* 作为上面的评论,那确实是正确的。但是,我认为重要的是要提到正则表达式需要很长时间才能编译,如果这个 if 语句嵌套在循环中,那么在java.util.regex.* 中使用完整的正则表达式实现可能是个好主意。而不是 String 中提供的便捷方法。为此,首先从您的字符串中编译一个Pattern 对象。

Pattern p = Pattern.compile(".*[a-z].*");

这样正则表达式只需编译一次,而不是每次调用String#matches(String regex)。正则表达式编译非常computationally intensive。然后,使用您的输入字符串创建一个匹配器。

Matcher m = p.matcher(str);

现在,拨打Matcher#find()

if(m.find()) {
//Your code here
}

不过,你也可以只测试看看是否

str.toUpperCase().equals(str)

这取决于你。如果绝对必要,我只会使用正则表达式,因为它会减慢您的程序,并且在这种情况下不是很优雅。至少你现在知道如何正确使用它们了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-13
    • 2017-01-10
    • 2020-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多