【问题标题】:Regex inverse matching on specific string?特定字符串的正则表达式反向匹配?
【发布时间】:2011-09-09 23:20:15
【问题描述】:

我想匹配以下

  • com.my.company.moduleA.MyClassName
  • com.my.company.moduleB.MyClassName
  • com.my.company.anythingElse.MyClassName

不是以下

  • com.my.company.核心.MyClassName

我目前的简单正则表达式模式是:

Pattern PATTERN_MODULE_NAME = Pattern.compile("com\\.my\\.company\\.(.*?)\\..*")

Matcher matcher = PATTERN_MODULE_NAME.matcher(className);
if (matcher.matches()) {
    // will return the string inside the parentheses (.*?)
    return matcher.group(1);
}

所以,基本上,我怎样才能匹配其他所有内容,但不是特定字符串,在我的情况下是字符串 core

请分享您对如何在 Java 中实现这一点的想法?

谢谢!

【问题讨论】:

    标签: java regex regex-negation


    【解决方案1】:

    您可以使用以下正则表达式:

    ^com\\.my\\.company\\.(?!core).+?\\.MyClassName$
    

    【讨论】:

    • +1,但看起来你在最后一对反斜杠之前多了一个点。
    • codaddict:谢谢!这正是我想要的。
    【解决方案2】:

    也许正则表达式不是写这个的最清晰的方法。

    if (className.startsWith("com.my.company.") 
        && !className.startsWith("com.my.company.core.")) {
    
    }
    

    这很清楚它的作用,您可能会发现它更快。 ;)

    【讨论】:

    • 谢谢,它既简单又干净。 :-)
    • 正则表达式很酷,但可能会变成一串神秘的符号,这会使以后阅读它的人很难确定它的作用或如何更改它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多