2017-01-10 126 views
0

我試圖從兩個不同的字符串格式正則表達式組被太貪婪

提取物含量

例一

{新= [[CONTENT],[CONTENT],[CONTENT],[CONTENT] ,[CONTENT],[CONTENT]],MOD = [],德爾= []}

例二

{新= [[CONTENT]],MOD = [],德爾= []}

我試過以下的正則表達式,但它太貪婪,不適用於這兩種格式。

{new=\[(\[.*\])(, |)\], mod=\[\], del=\[\]\} 

需要什麼正則表達式來匹配兩個例子並將CONTENT放入匹配組中?

+0

此無關貪。什麼是您正在使用的正則表達式引擎?什麼是編程語言?使用你的正則表達式,抓住組1的內容,從'['和']'修剪,並用'],['分割。 –

+0

@Wiktor我正在使用Java – Arya

+0

好的,然後使用'\ {new = \ [\ [(。*)\](,|)\],mod = \ [\],del = \ [\] \} ''並用'\],\ ['正則表達式''分割'm.group(1)'。請參閱[本演示](http://ideone.com/wlf19I)。 –

回答

0

我建議走動.*的捕獲括號,然後抓住第1組的內容和分裂與\], \[模式:

String s = "{new=[[CONTENT], [CONTENT], [CONTENT], [CONTENT], [CONTENT], [CONTENT]], mod=[], del=[]}"; 
Pattern pattern = Pattern.compile("\\{new=\\[\\[(.*)\\](, |)\\], mod=\\[\\], del=\\[\\]\\}"); 
Matcher m = pattern.matcher(s); 
String[] res = null; 
if (m.find()){ 
    res = m.group(1).split("\\], \\["); 
} 
if (res != null) { 
    System.out.println(Arrays.toString(res)); 
} 

Java demo