2011-06-07 107 views
4

我想匹配以下正則表達式匹配特定字符串?

  • 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); 
} 

所以,基本上,我怎麼能匹配其他的一切,但沒有一個特定的字符串,這是字符串核心在我的情況。

請分享你的想法如何在Java中實現?

謝謝!

回答

6

您可以使用以下正則表達式:

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

+1,但看起來你在最後一對反斜槓之前有一個額外的點。 – 2011-06-07 19:04:43

+0

謝謝Alan。 code: – codaddict 2011-06-08 03:36:21

+0

codaddict:謝謝!這正是我所期待的。 – bertie 2011-06-08 09:23:56

5

也許一個正則表達式不是寫這個最清晰的方法。

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

} 

這是公平的清楚它做了什麼,你可能會發現它更快。 ;)

+0

謝謝,這很簡單,乾淨。 :-) – bertie 2011-06-08 09:18:07

+0

正則表達式很酷,但可以成爲一個神祕的符號串,這可能會讓稍後有人閱讀它以確定它究竟做了什麼或如何改變它。 – 2011-06-08 09:41:29

相關問題