Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
6 / 6 / 3
Регистрация: 20.11.2013
Сообщений: 249
1

Регулярные выражения

21.09.2014, 05:06. Показов 1355. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброй ночи! Использую вот такой код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
void INITDIALOG(void* p){
    char* bufer = new char[4096];
    server.GetLocList(bufer);
    char * t = bufer;
 
    std::string s = std::string(bufer);
    std::smatch m;
    std::regex e("<loca>(.+?)</loca>");   // matches words beginning by "sub"
 
 
    while (std::regex_search(s, m, e)) {
        for (auto x : m){
 
            std::cout << x << std::endl;
            std::string t = std::string(x);
 
            char *y = new char[t.length() + 1];
            *y = 0;
            strcat_s(y, t.length() + 1, t.c_str());
 
            SendDlgItemMessage(tab[4], IDC_COMBO_loc, CB_ADDSTRING, 0, (LPARAM)y);
        }
        std::cout << std::endl;
        s = m.suffix().str();
    }
}
но кроме нужного текста между тегами он почемуто еще раз вставляет все тежи строки но уже с тегами <loca>
Миниатюры
Регулярные выражения  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.09.2014, 05:06
Ответы с готовыми решениями:

С++ и регулярные выражения
С++ и регулярные выражения - возможно ли ето? Какие есть библиотеки или что-то в етом роде?

Регулярные выражения
Как с помощью регулярных выражения записать следующую конструкцию: '&lt;любые символы&gt;' По идее...

Регулярные выражения на C++
Здраствуйте, возникла необходимость использовать регурные выражения в Си++. Первое что пришло в...

Регулярные выражения
Пытаюсь составить регулярное выражение для поиска словосочетания: тип + имя переменной ...

8
2443 / 1841 / 406
Регистрация: 15.12.2013
Сообщений: 8,238
21.09.2014, 10:48 2
Цитата Сообщение от DELAKEY Посмотреть сообщение
но кроме нужного текста между тегами он почемуто еще раз вставляет все тежи строки но уже с тегами <loca>
Эти теги у вас записаны в регулярном выражении,значит они обязательно будут в строке-совпадении(если нет специального квантификатора). В вашем случае стоит извлекать совпадение из группирующей круглой скобки.
0
1458 / 795 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
21.09.2014, 12:48 3
DELAKEY, пробуй с такой регуляркой:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <vector>
#include <boost/regex.hpp>
 
int main()
{
   std::vector<std::string> v{
      "<loca>Hello</loca>",
      "<loca>world</loca>",
      "<loca>print</loca>",
      "<loca>string</loca>"
   };
 
   boost::regex e{"(?<=<(loca)>)(.+?)(?=</\\1>)"};
   boost::smatch m;
   for (auto& str : v)
   {
      boost::regex_search(str, m, e);
      std::cout << m << "\n";
   }
 
   return 0;
}
0
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
21.09.2014, 13:26 4
Цитата Сообщение от DELAKEY Посмотреть сообщение
но кроме нужного текста между тегами он почемуто еще раз вставляет все тежи строки но уже с тегами <loca>
for (auto x : m) auto x=m[1]
0
6 / 6 / 3
Регистрация: 20.11.2013
Сообщений: 249
21.09.2014, 15:52  [ТС] 5
DiffEreD, Видимо это особенность вашей среды разработки но VS на этом крошиться,

и еще входная строка выглядит таким образом
Код
<!DOCTYPE HTML><meta charset = 'utf-8'/><loca><id>0</id><name>Юнона</name></loca><loca><id>1</id><name>Храм Велпистов</name></loca><loca><id>2</id><name>Персональное подзамелье 1</name></loca><loca><id>3</id><name>Дратан</name></loca><loca><id>4</id><name>Перс.Подземелье</name></loca><loca><id>5</id><name>Обуч.подземелье</name></loca><loca><id>6</id><name>Мерак</name></loca><loca><id>7</id><name>Зал гильдии</name></loca><loca><id>8</id><name>Темница Мааргадума</name></loca>
т.е. мне нужно выделить несколько <loca>....</loca> поэтому вариант от Renji, неподойдёт
0
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
21.09.2014, 16:05 6
Цитата Сообщение от DELAKEY Посмотреть сообщение
т.е. мне нужно выделить несколько <loca>....</loca> поэтому вариант от Renji, неподойдёт
Ну вы бы хоть документацию иногда читали, а не просто готовый код копипастили. for (auto x : m) перебирает не различные <loca>....</loca>, а части одного совпадения (совпадение целиком, первые скобки, вторые скобки, etc). И от замены for на auto x=m[1] перебор <loca>....</loca> никак не страдает.
0
6 / 6 / 3
Регистрация: 20.11.2013
Сообщений: 249
21.09.2014, 16:15  [ТС] 7
Renji, Не сразу я понял что в моём коде 2 цикла...
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
21.09.2014, 16:23 8
Цитата Сообщение от DELAKEY Посмотреть сообщение
Видимо это особенность вашей среды разработки но VS на этом крошиться
регулярка верная, заглядывание помогает не запоминать части "до" и "после", которые запоминаются при использовании вашей регулярки..
З.Ы. не лучше ли обойтись без регулярок?
0
6 / 6 / 3
Регистрация: 20.11.2013
Сообщений: 249
24.09.2014, 02:41  [ТС] 9
уже решил благодаря совету Renji
Цитата Сообщение от KOPOJI Посмотреть сообщение
З.Ы. не лучше ли обойтись без регулярок?
честно говоря просто не представляю как
0
24.09.2014, 02:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.09.2014, 02:41
Помогаю со студенческими работами здесь

Регулярные выражения
Ребят, у меня тут проблемы. В файле input.txt есть строчки, в которых нужно найти вес, т.е.,...

Регулярные выражения
Всем доброе утро. Ребята подскажите что не так в выражении вот шаблон регулярного выражения...

Регулярные выражения
Здравствуйте, Надо заменить в тексте номер телефона формата (012) 345-67-89 на +380 12 345 67 89....

Регулярные выражения в с++
Рылся рылся, нигде не нашел... Кто нибудь, объясните: 1) как установить эту библиотеку Regex. 2)...

Регулярные выражения
Как из этой строки вытянуть png с помощью регулярки, кроме png может быть другой тип, &quot;image/&quot;...

Регулярные выражения
Привет помогите составить регулярное выражение, чтобы парсить такую строку: , , результатом...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru