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

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

29.12.2014, 14:00. Показов 8758. Ответов 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
2224 / 1426 / 420
Регистрация: 16.05.2013
Сообщений: 3,649
Записей в блоге: 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
2224 / 1426 / 420
Регистрация: 16.05.2013
Сообщений: 3,649
Записей в блоге: 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
2224 / 1426 / 420
Регистрация: 16.05.2013
Сообщений: 3,649
Записей в блоге: 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
2224 / 1426 / 420
Регистрация: 16.05.2013
Сообщений: 3,649
Записей в блоге: 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
2224 / 1426 / 420
Регистрация: 16.05.2013
Сообщений: 3,649
Записей в блоге: 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
2224 / 1426 / 420
Регистрация: 16.05.2013
Сообщений: 3,649
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача №1: при указании работ (справочник РаботыПоРемонтуСпецтехники),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru