2015-11-05 25 views
1

這一個特定字後提取的第一個字是我嘗試如何從正則表達式

public static final String EXAMPLE_TEST = "ddd with fff Node preceded" 
      + " by Class Application bzxcd by " 
      + "Class aaa ds preceded by Class bbbb xxxx Ass"; 

      public static void main(String[] args) { 
      boolean clarrification = EXAMPLE_TEST.matches(".*\\bClass\\b.*"); 


      String pattern = "(.*?\\bClass\\b.*?)(\\s+)(\\w+)"; 

      System.out.println(EXAMPLE_TEST.replaceFirst(pattern, "$3$2")); 

什麼我想這裏是只提取「類」字後的第一次出現的代碼。在我的情況下,它提取了應用程序,但後面跟着其餘的單詞。

如何解決這個問題?

回答

1

你可以使用這個簡單的正則表達式:

String pattern = ".*?\\bClass\\s+(\\w+)\\b.*"; 

System.out.println(EXAMPLE_TEST.replaceFirst(pattern, "$1")); 
//=> Application 

此正則表達式使用.*?其次是單詞邊界和文本Class 0個或多個字符匹配之前Class(非貪婪)。接着是1個或多個空格,然後使用(\\w+)在下一個單詞中捕獲到一個組。它必須跟隨.*以匹配字符串的其餘部分。在替換中,我們只是使用反向引用$1在最終輸出中獲取匹配的單詞。

+0

謝謝。你能否詳細說明你的解決方案?我正在嘗試學習正則表達式。 – newday

+0

我在回答中添加了解釋。 – anubhava

+1

是的,非常感謝。 – newday