【问题标题】:Check if word contains substring in Java Regex检查单词是否包含Java Regex中的子字符串
【发布时间】:2011-01-18 12:33:45
【问题描述】:

如果我想检查所有包含子字符串 DEF 的单词,这是否是正确的方法:

^.*[D][E][F].*$

在否定正则表达式时也有一个简单的规则,即修改上面的内容以识别不包含 DEF 的字符串

编辑:我知道这不需要正则表达式,但出于我的目的,它确实需要。

【问题讨论】:

    标签: java regex string


    【解决方案1】:

    这也有效:

    ^.*DEF.*$
    

    它检查整个字符串是否至少包含一次子字符串“DEF”。但是对于像这样的琐碎表达式:

    str.contains("DEF");
    

    做同样的事情。

    【讨论】:

    • @LouisRhys、^$ 分别代表字符串的开头和结尾。如果您使用 java 的 String.matches(String),则不需要使用它们,因为只有当正则表达式匹配 整个 输入字符串时,此方法才会返回 true。
    【解决方案2】:

    为什么不直接使用str.contains("DEF")!str.contains("DEF")

    【讨论】:

    • 内置 contains() 方法只是在字符串中的字节中查找字符 D、E 和 F 的出现顺序,您可以将其视为暴力搜索。例如。对于该序列,将“检查”最多 97 次 100 个字符的字符串。正则表达式是一种非常非常不同的动物。
    • 了解更多关于字符串搜索/匹配的信息:en.wikipedia.org/wiki/String_searching_algorithm
    • "为什么不直接使用..." 因为我必须在我的情况下使用正则表达式。至于回答这个问题,这对于很多情况来说可能是一个更好的答案,但是你问“为什么不”所以这就是为什么不......
    【解决方案3】:

    您可以简单地使用DEF 作为您的正则表达式。要识别不包含它的字符串,只需返回与上述表达式不匹配的字符串即可。

    【讨论】:

    • 如何使用正则表达式识别所有不包含特定子字符串的单词
    • 就像我说的,我只是否定结果,所以它会是!string.matches( "DEF" );
    • 但我的意思是在java之外只使用一个正则表达式
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-25
    • 1970-01-01
    • 2015-09-29
    • 2012-03-19
    • 2014-11-27
    • 1970-01-01
    • 2013-12-23
    相关资源
    最近更新 更多