С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.58/40: Рейтинг темы: голосов - 40, средняя оценка - 4.58
zzzZZZ...
 Аватар для dzrkot
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,041

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

29.12.2014, 14:00. Показов 8575. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как правильно составить регулярное выражение, чтобы выдергивать весь текст между '{' *это мы выдергиваем*'}'
сделал так QRegExp exp("\\b([{]+).*([}])");
, но результатом является только "D:/Documents/QT/build-editor1-Desktop_Qt_5_4_0_MinGW_32bit-Release/main.rs"
т.е. последнее вхождение..
Да, и можно ли выдергивать сразу без "{}" , хотя это и не принципиально
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
QRegExp exp("\\b([{]+).*([}])");
str="last_open_files:\n"
"{D:/Documents/QT/build-editor1-Desktop_Qt_5_4_0_MinGW_32bit-Release/main2.rs}\n"
"21332{D:/Documents/QT/build-editor1-Desktop_Qt_5_4_0_MinGW_32bit-Release/main.rs}\n";
int pos=0;
int count=0;
while( (pos = exp.indexIn(str,pos) )!=-1)
      {
      QString temp(exp.capturedTexts().at(count));
      // temp.remove(0,1);
      // temp.remove(temp.size()-1,1);
      qDebug()<<temp;
      listOfPath<<temp;
      pos+=exp.matchedLength();
      count++;
      }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.12.2014, 14:00
Ответы с готовыми решениями:

Выделить текст между фигурными скобками
Выделить текст главной функции void main() { char s = &quot;#include &lt;iostream&gt;using namespace std;void main(){int j;//number for(int...

Удалить группы символов, расположенные между фигурными скобками
2.12. Пусть во входном потоке находится последовательность литер, заканчивающихся точкой (кодировка ASII). Вывести в выходной поток...

В Notepad++ удаление содержимого между фигурными скобками. Регулярные выражения
Доброго дня всем. Возникла задача удаление содержимого в тысячах фалах c содержанием такого типа: version 2 extends...

13
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2223 / 1425 / 420
Регистрация: 16.05.2013
Сообщений: 3,642
Записей в блоге: 6
29.12.2014, 14:17
dzrkot, группы захвата нужно делать для той части текста которая выдергивается. У тебя зачем-то в группе захвата числятся скобки. Т.е. нужно так
C++ (Qt)
1
QRegExp exp("\\b[{](.*)[}]");
1
zzzZZZ...
 Аватар для dzrkot
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,041
29.12.2014, 14:19  [ТС]
Цитата Сообщение от Ilot Посмотреть сообщение
dzrkot, группы захвата нужно делать для той части текса которая выдергивается. У тебя зачем, то в группе захвата числятся скобки. Т.е. нужно так
да возможно, но результат с ("\\b[{](.*)[}]"); тот же ...=(

я с ними плохо знаком, вот и пытаюсь разобраться...так то бы сделал прямолинейно по индексам поиск
0
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2223 / 1425 / 420
Регистрация: 16.05.2013
Сообщений: 3,642
Записей в блоге: 6
29.12.2014, 14:22
dzrkot, в группу захвата нужно добавить исключение для '}'. Давно не писал регулярки, но кажется должно быть так:
C++ (Qt)
1
QRegExp exp("\\b[{]([^}]*)[}]");
Регулярки работают по принципу "жадных" алгоритмов, поэтому она цепляет максимальное вхождение.
1
zzzZZZ...
 Аватар для dzrkot
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,041
29.12.2014, 14:28  [ТС]
Цитата Сообщение от Ilot Посмотреть сообщение
QRegExp exp("\\b[{]([^}]*)[}]");
тоже пытался в 1 из вариантов, которых уже перебрал кучу... не подходит
0
 Аватар для DiffEreD
1458 / 795 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
29.12.2014, 14:30
Пример на boost-те:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <string>
#include <boost/regex.hpp>
 
int main()
{
   const std::string s =  "00110110{hello }000  {world} 01";
   const boost::regex re(R"((?<=\{).*?(?=\}))");
   boost::smatch matches;
 
   std::string::const_iterator pos = s.begin();
   while (boost::regex_search(pos, s.end(), matches, re))
   {
      if (!matches.empty())
      {
         std::cout << matches[0] << std::endl;
         pos = matches[0].second;
      }
   }
}
1
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2223 / 1425 / 420
Регистрация: 16.05.2013
Сообщений: 3,642
Записей в блоге: 6
29.12.2014, 14:43
Цитата Сообщение от dzrkot Посмотреть сообщение
тоже пытался в 1 из вариантов, которых уже перебрал кучу... не подходит
Посмотрел внимательнее. На самом деле подойдет первый вариант. Т.к. символ '\n' не входит в последовательность маскируемую точкой. Возможно проблема не в регулярке, а в ее обработке? Но с кьютовскими регулярками я не знаю как работать, но вот пример для std:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <regex>
#include <string>
std::string str = "last_open_files:\n"
"{D:/Documents/QT/build-editor1-Desktop_Qt_5_4_0_MinGW_32bit-Release/main2.rs}\n"
"21332{D:/Documents/QT/build-editor1-Desktop_Qt_5_4_0_MinGW_32bit-Release/main.rs}\n";
int main () {
    std::smatch match;
    std::regex reg("[{](.*)[}]");
    std::string::const_iterator beg = str.cbegin();
    while (std::regex_search (beg, str.cend(), match ,reg)) {
        std::cout << match.str(1) << std::endl;;
        beg = match.suffix().first;
    }
    return 0;
}
Ах, точно все дело в '\b'. Склеротик...
1
zzzZZZ...
 Аватар для dzrkot
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,041
29.12.2014, 14:47  [ТС]
перенеси пожалуйста в раздел QT , мб я действительно не правильно обрабатываю...
0
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2223 / 1425 / 420
Регистрация: 16.05.2013
Сообщений: 3,642
Записей в блоге: 6
29.12.2014, 14:48
dzrkot, см. замечание после кода...
1
zzzZZZ...
 Аватар для dzrkot
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,041
29.12.2014, 14:54  [ТС]
Цитата Сообщение от Ilot Посмотреть сообщение
dzrkot, см. замечание после кода...
на такой вызов QRegExp exp("[{]([^{}]*)[}]");
выдаёт результат:
C++ (Qt)
1
2
"{D:/Documents/QT/build-editor1-Desktop_Qt_5_4_0_MinGW_32bit-Release/main2.rs}"
"D:/Documents/QT/build-editor1-Desktop_Qt_5_4_0_MinGW_32bit-Release/main.rs"
в 1ом случае {} не игнорируются...
0
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2223 / 1425 / 420
Регистрация: 16.05.2013
Сообщений: 3,642
Записей в блоге: 6
29.12.2014, 15:10
dzrkot, регулярное выражение "[{](.*)[}]". Я же выше объяснил, почему исключение не нужно.
0
zzzZZZ...
 Аватар для dzrkot
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,041
29.12.2014, 15:11  [ТС]
мх...в итоге QRegExp exp("[{]([^{}]*)[}]"); заработал после очистки и пересборки проекта, ох уж этот qtCreator ...
Цитата Сообщение от Ilot Посмотреть сообщение
dzrkot, регулярное выражение "[{](.*)[}]". Я же выше объяснил, почему исключение не нужно.
тем не менее с исключением работает как надо, без него - не работает)
думаю что потом по мере накапливания опыта я разберусь что к чему, а пока меня это устроит)
0
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2223 / 1425 / 420
Регистрация: 16.05.2013
Сообщений: 3,642
Записей в блоге: 6
29.12.2014, 15:27
dzrkot, кстати рекомендую Джосаттиса 2-е издание. Сам из питера заказывал. Ни капли не разочарован хоть и пришлось отдать 1,8е+3 рубля. Регулярки у него очень хорошо описанны и много чего еще...
1
zzzZZZ...
 Аватар для dzrkot
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,041
29.12.2014, 15:30  [ТС]
Цитата Сообщение от Ilot Посмотреть сообщение
dzrkot, кстати рекомендую Джосаттиса 2-е издание. Сам из питера заказывал. Ни капли не разочарован хоть и пришлось отдать 1,8е+3 рубля. Регулярки у него очень хорошо описанны и много чего еще...
спасибо, сегодня посмотрю)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.12.2014, 15:30
Помогаю со студенческими работами здесь

Записать в коллекцию все строки между фигурными скобками
Здравствуйте, уважаемые форумчане. Есть файл, в нем текст вида: Plast { Name = &quot;&quot;; Index = 3800; YTre =...

Удалить группы символов, расположенные между фигурными скобками
А можно это же самое, только на си++? Так же ответить на некоторые вопросы типа: 1. без этих подозрительных звезд * нельзя обойтись?...

Что находится между заголовком конструктора и фигурными скобками?
Между названием метода и фигурными скобками есть область куда вводятся ??? Что вводится??? void func():&lt;как эта область...

Исключить из строки группы символов, расположенных между фигурными скобками
Ребят нужно решить 2 задачи, а я в этом ничего не понимаю. 1) Задана строка символов. Исключить из этой строки группы символов,...

Удалить в строке все, что заключено между фигурными скобками и их самих
Тема: Строки. Множества. 3.1. Составить программу, удаляющую в строке все, что заключено между фигурными скобками и их самих. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru