2013-11-10 4 views
-3

Мне нужно извлечь строку между двумя {}. Например, .split (регулярных выражений)Regex, чтобы получить строку между {} (Java)

{Regex is difficult.}fadsfjkaslfdjsa{Humbug}asfasdfjaskdlfjlkaf 

должен возвращать массив с Regex is difficult. в качестве первой записи и Humbug в качестве второго.

Как написать регулярное выражение для этого в Java?

Я пробовал ответы ниже, но я хочу использовать myString.split (regex). Вероятно, я должен был быть более конкретным в своем ответе.

Должен ли я использовать .split() для этого или есть другой способ?

+1

Зачем вам нужно использовать 'split' здесь? Это не интуитивно понятный способ решения вашей проблемы. – Pshemo

ответ

3
String regex = "\\{([^}]*)\\}" 

\\{ и \\} побег { и } соответственно.
([^}]*) захватывает все после { и все символы следуют, но не включая }.
\\} в конце требует, чтобы есть }

В качестве альтернативы нежадного термина захвата работа, т.е. (.*?); однако я считаю, что класс персонажа легче понять для новичка.

EDIT:
Чтобы извлечь содержимое, просто сделайте следующее:

Matcher m = Pattern.compile("\\{([^}]*)\\}").matcher(myString); 

while (m.find()) 
{ 
    myArrayList.add(m.group(1)); 
} 
+0

Я думаю, что не жадный режим тоже слишком прост ... но это только мое мнение. –

+0

@SargeBorsch Я согласен, это не сложно, но если вы ничего не знаете о регулярном выражении, путь класса символов, вероятно, немного легче понять. –

+0

"\\ {([^}] *) \\}" может быть лучше зафиксировать скобки b/w пустых строк. –

1

Вы не можете иметь дело с вложенными структурами с регулярным выражением (это будет summon demons), но если они только 1 -level, то вы можете совместить их с
\{(.*?)\}

И регулярное выражение не составляет труда.

Смежные вопросы