2013-03-04 6 views
0

Регулярное выражение для получения значения из [[текста]]. Я пробовал регулярное выражениеJava regex для получения значения между скобками

"((?<=[[)*(?=]])*)+" the value between [[ ]] is not obtained. 

Например, из строки [[текст]] мы должны получить текст.

Pattern pat = Pattern.compile("((?<=\\[[)*(?=\\]])*)"); 
Matcher matcher = pat.matcher("[[text]]"); 
String next =""; 
while(matcher.find()) { 
    next = matcher.group(0); 
break; 
} 
System.out.println(next); //next should be text 
+0

пожалуйста развивать свой ответ ... Объясните лучше проблему, показать код, и т.д ... –

+0

Что @ MatiasCaamaño сказал - предложение: дать пример. И может ли значение содержать одиночные '' 'символы? –

ответ

2

Вы должны избежать скобки [] при использовании их в качестве фактических символов в регулярном выражении. И вам также нужно добавить что-то, чтобы фактически захватить то, что находится между скобками. Вы можете использовать .* для этого или использовать мой подход, если вы уверены, что значение не может содержать ].

((?<=\[\[)([^\]]*)(?=\]\]))+ 

Существует даже на самом деле не нужно использовать lookbacks унд lookaheads, если вы не Явно необходимо освободить эти ограничители от матча. Это будет работать точно так же:

\[\[([\]]*\]\] 

И, очевидно, когда вы кладете их в строку, необходимо добавить дополнительные \, чтобы избежать \ для строки ... они просто более удобным для чтения таким образом.

1

Если вы не хотите попасть в regex, String.replaceAll также может вам помочь.

String s2 = s.replaceAll("\\[", "").replaceAll("\\]", ""); 
1
"(?<=\\[\\[)[^\\]]*" 

это должно работать для вас