2011-10-09 25 views
0

使用正則表達式我有一個包含以下子的一個或一個以上的次一個字符串的子字符串::提取和替換Java中

(DynamicContent(abc.xyz)) 

我想用一個不同的字符串取決於更換這整個子abcxyz。因此,我想先分別提取他們兩個。 所有這些都必須使用Java完成。

實施例:
輸入字符串:(DynamicContent(box-shadow.css)):0px 2px 10px #330000;
輸出String:-moz-box-shadow:0px 2px 10px #330000;(取決於客戶機的瀏覽器)

我發現使用box-shadowcss輸出字符串。

+0

也許你可以告訴我們一個示例輸入和輸出。 –

+3

需要更多的清晰度問題。請進一步詳細說明,可以舉例說明。 – Saket

+0

字符串:(DynamicContent(box-shadow.css)) 輸出:-moz-box-shadow(取決於客戶端的瀏覽器) 我還希望在不同的字符串變量中使用「box-shadow」和「css」。 –

回答

0

\(DynamicContent\(box-shadow\.css\)\)應該匹配,只是逃避所有的metacharacters

在Java中的正則表達式:

\\(DynamicContent\\(box-shadow\\.css\\)\\)

爲了得到箱陰影和CSS在不同的小組使用:

\\(DynamicContent\\((box-shadow)\\.(css)\\)\\)如果你只需要在這個特定的字符串或一個以上所有的目的相匹配:\\(DynamicContent\\((.+)\\.(\\w+)\\)\\)

+0

我也想檢索box-shadow和css作爲不同的字符串。 –

0

在這種情況下,我會爲DynamicContent和您的兩個參數(abc和xyz)之前的文本使用matcher組創建一個正則表達式模式, 。然後,您可以使用Matcher.find()方法重複掃描文本,並使用匹配器組的值構建輸出。

0

這會發現你的組:

List<String> matchList = new ArrayList<String>(); 
try { 
    Pattern regex = Pattern.compile("\\(([^(]+)\\.([^)]+)"); 
    Matcher regexMatcher = regex.matcher(subjectString); 
    while (regexMatcher.find()) { 
     matchList.add(regexMatcher.group(1)); 
     matchList.add(regexMatcher.group(2)); 
    } 
} catch (PatternSyntaxException ex) { 
    // Syntax error in the regular expression 
} 

當適用於:

(DynamicContent(abc.xyz)) 

它得到的內部括號組之前,無論是內容。到第1組以及之後的任何事情。到組2.

希望它有幫助:)