Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 01.06.2015
Сообщений: 60

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

12.06.2015, 15:43. Показов 1404. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как записать строки у тегов <c></c> и <v></v>?
XML
1
2
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac"><dimension ref="A1:FI4721"/><sheetViews><sheetView tabSelected="1" workbookViewId="0"/></sheetViews><sheetFormatPr defaultRowHeight="14.5" x14ac:dyDescent="0.35"/><sheetData><row r="1" spans="1:4" x14ac:dyDescent="0.35"><c r="A1"><v>1</v></c></row><row r="2" spans="1:4" x14ac:dyDescent="0.35"><c r="B2"><v>2</v></c></row><row r="3" spans="1:4" x14ac:dyDescent="0.35"><c r="A3"><v>3</v></c></row><row r="4" spans="1:4" x14ac:dyDescent="0.35"><c r="D4"><v>4</v></c></row><row r="4721" spans="165:165" x14ac:dyDescent="0.35"><c r="FI4721"><v>5</v></c></row></sheetData><pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" footer="0.3"/></worksheet>
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.06.2015, 15:43
Ответы с готовыми решениями:

Регулярные выражения с++
Пользователь должен ввести строки: фамилию(первая буква должна быть заглавной), дату рождения(по форме аа.аа.аааа), состояние здоровья(good...

Регулярные выражения
Стоит задача, проверить является ли вводимая строка заданной маской. Но маска(регулярное выражение тоже как я понял должно вводится со...

Регулярные выражения
Можете подсказать что это значит? &quot;Max-Forwards*(\d{3,}|7)&quot; я без понятия что это и откуда это( Добавлено через 4 минуты я уже...

13
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
12.06.2015, 17:03
что значит "у тегов" ? Строка до тега, строка внутри тега, строка после тега, ....?
0
0 / 0 / 0
Регистрация: 01.06.2015
Сообщений: 60
12.06.2015, 17:42  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
что значит "у тегов" ? Строка до тега, строка внутри тега, строка после тега, ....?
Строки внутри тегов.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
12.06.2015, 18:09
Code
1
(?<=<([cv])>)(.*?)(?=</\1>)
0
0 / 0 / 0
Регистрация: 01.06.2015
Сообщений: 60
12.06.2015, 18:11  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
1
(?<=<[cv]>).*?(?=</[cv]>)
А если только внутри тегов <c></c> ?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
12.06.2015, 18:13
Code
1
(?<=<c>).*?(?=</c>)
Добавлено через 1 минуту
вы уверены, что на плюсах в данном случае будет лучше использовать регулярки вместо обычного парсинга..?
0
0 / 0 / 0
Регистрация: 01.06.2015
Сообщений: 60
12.06.2015, 18:17  [ТС]
Что-то не работает, не знаю почему.
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
// XlsReader.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <regex>
#include <string>
#include <fstream>
#include <iostream>
 
 
int main(int argc, char* argv[])
{
    //Открываем файл
    if (argc < 2)
    {
        std::cout << "Not found filename" << std::endl;
        return 1;
    }
    std::string filename(argv[1]);
    if (filename.empty())
    {
        std::cout << "filename is empty" << std::endl;
        return 1;
    }
    std::ifstream file(filename);
    if (!file)
    {
        std::cout << "could not open file" << std::endl;
        return 1;
    }
    //Читаем его в строку
    file.seekg(0, file.end);
    //int size = file.tellg();
    std::streampos size = file.tellg();
    file.seekg(0, file.beg);
    char *ch = new char[size];
    file.read(ch, size);
    std::string str;
    str.append(ch, size);
    delete[] ch;
    //Этот класс хранит извлечённые данные
    //sm[0] хранит всё савпадение, sm[1] то что было в первых () и т.д
    std::smatch sm;
    //Это класс с регулярным выражением. Тут я извлекаю весь тег со строками.
    std::regex exp("(?<=<c>).*?(?=</c>)");
    //Эта функция ищет совпадение в строке, и пишет в smatch
    std::regex_search(str, sm, exp);
    //Так как мы захватывали скобками только одну группу, то нам нужны данные из sm[1], если их нет, то ошибка
    if (sm.size() != 2)
    {
        std::cout << "Error: sheet1 parsing." << std::endl;
        return 1;
    }
    //Копируем в строку найденый тег
    str = sm.str(1);
    //Это выражение найдёт количество строк в теге, то есть найдёт uniqueCount="6" и извлекёт число,  
    //есть ещё пареметр count="6" в теге, но я не понял разницу. Так как скобка одна и в ней \d+, то в
    //первый индекс попадёт число В ВИДЕ СТРОКИ длиной от одного символа. В регулярных выражениях \d - это
    //число, + - это один или более символов. \ надо экранировать в с++
    exp = "uniqueCount=\"(\\d+)\"";
    std::regex_search(str, sm, exp);
    std::cout << sm.str(1) << std::endl;
    if (sm.size() != 2)
    {
        std::cout << "Error: no found uniqueCount" << std::endl;
        return 1;
    }
    std::cout << sm.str(1) << std::endl;
    //тут я помещаю в строку суффикс. То есть то строку с того место, на котором прекратился последний поиск.
    str = sm.suffix(); 
    //Это выражение будет искать и захватывать строки в тегах <si><t>какая то строка</t></si>
    //Так как строк может быть много, то надо искать в цикле, пока regex_search не вернёт false
    //После каждого удачного поиска суффикс будет на оставшейся строке, а в первом индексе нужные данные.
    //Так как строк должно быть столько же, как и указано в count или uniqueCount (возможно есть разница в 
    //этих параметрах, но я не обнаружил), то имеет смысл проверить это и если строк больше или меньше выдать 
    //ошибку.
    exp = "(?<=<[cv]>).*?(?=</[cv]>)";
    while (std::regex_search(str, sm, exp))
    {
        if (sm.size() == 2)
            std::cout << sm.str(1) << std::endl;
        str = sm.suffix();
        
    }
    std::cin.get();
    return 0;
}
Насчет плюсов, так работает с другим xml.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
12.06.2015, 18:30
потому что эта пародия на регулярки не поддерживает заглядывания назад. Нашли, откуда взять синтаксис, с JS (EcmaScript), тьфу..
0
0 / 0 / 0
Регистрация: 01.06.2015
Сообщений: 60
12.06.2015, 18:33  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
потому что эта пародия на регулярки не поддерживает заглядывания назад. Нашли, откуда взять синтаксис, с JS (EcmaScript), тьфу..
мне оч надо именно на C++ регулярки написать
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
12.06.2015, 18:42
В C++ есть и другие "регулярщики" - например, boost.
ну или должно работать так
Code
1
<v>(.*?)</v>
Хотя у меня не заработало
0
0 / 0 / 0
Регистрация: 01.06.2015
Сообщений: 60
12.06.2015, 18:48  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
Хотя у меня не заработало
У меня тоже, в чем может быть дело?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
12.06.2015, 19:09
Без понятия. У меня даже пример с http://www.cplusplus.com/refer... ex_search/ не работает

Добавлено через 16 минут
А, ну походу он еще не готов https://gcc.gnu.org/onlinedocs... us.iso.tr1, 7.11.3
0
Неэпический
 Аватар для Croessmah
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,030
Записей в блоге: 1
12.06.2015, 19:09
Цитата Сообщение от KOPOJI Посмотреть сообщение
не работает
GCC(MinGW)?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
12.06.2015, 19:10
Да, и правда. MinGW

Не по теме:

на gcc под линью все работает, юзал как-то :) Венда такая венда)

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.06.2015, 19:10
Помогаю со студенческими работами здесь

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

Регулярные выражения
Доброй ночи! Использую вот такой код void INITDIALOG(void* p){ char* bufer = new char; server.GetLocList(bufer); char * t =...

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

Регулярные выражения
Создать регулярное выражение в котором будет кириллица латиница цифры пробел разделительные знаки при этом разделительные знаки не должны...

Регулярные выражения в g++
Привет всем! этот пример взял из http://www.cplusplus.com/reference/regex/regex_search/ и скомпилировал g++ . #include &lt;iostream&gt; ...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru