Я пытаюсь написать регулярное выражение для выделения текста между двумя фигурными скобками в файле Java. Текст в фигурных скобках может занимать несколько строк.

Например.,

{
   // line1 ;
   // line 2 ;
   // line 3 ;
}

Мне нужно выделить все строки между фигурными скобками.

Я пробовал \{[.]*\}, но он не выбирает несколько строк.

Пожалуйста, посоветуйте мне в этом отношении. Спасибо.

0
Omkar Shetkar 5 Янв 2017 в 08:51
Ты можешь попробовать это {[^}]*}
 – 
Pavneet_Singh
5 Янв 2017 в 08:52

2 ответа

Как правило, это не очень хорошая идея, так как вам нужно учитывать вложенные скобки и т. Д. Возможно, вам лучше использовать парсер.
При этом вы можете использовать следующую конструкцию:

^\{
(.+?)
^\}

Это предполагает, что открывающая и закрывающая скобки стоят отдельно в одной строке. Если вы хотите также разрешить пробелы, вам нужно изменить его на:

^\s*\{
(.+?)
^\s*\}

См. демонстрацию на regex101.com (и обратите внимание на различные модификаторы , т.е. DOTALL и MULTILINE!).

2
Jan 5 Янв 2017 в 09:29
К сожалению, я не могу проверить это конкретное регулярное выражение ни в одном из моих редакторов Atom, Eclipse, Vim :( Я вижу, что оно работает только в regex101.com. Похоже, многие редакторы не поддерживают или частично поддерживают флаги выражений.
 – 
Omkar Shetkar
5 Янв 2017 в 10:41

Вам нужно добавить разрывы строк в регулярное выражение ... Попробуйте следующее: \ {(. * \ R \ n) * \}

1
user 5 Янв 2017 в 11:42
Просто: нет. Вам нужно избегать скобок в большинстве разновидностей регулярных выражений, кроме того, это будет работать только для одной строки (если не указано DOTALL).
 – 
Jan
5 Янв 2017 в 09:31
Да, скобки нужно избегать. Я поставил escape-символ, но, думаю, его удалили. Я редактировал это. Чтобы напечатать escape-символ, мне пришлось поставить еще один escape-символ.
 – 
user
5 Янв 2017 в 11:43
Более того, он работает, даже если между фигурными скобками есть несколько линий. Возможно, вам придется соответственно удалить возврат каретки (\ r).
 – 
user
5 Янв 2017 в 11:49