Форум программистов, компьютерный форум, киберфорум
Boost C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
25 / 25 / 11
Регистрация: 02.01.2012
Сообщений: 371

Regex search

03.06.2013, 22:00. Показов 2018. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
string str;
    cin >> str;
    boost::regex reg("<!--googleoff:\\sall-->([^<]*)<!--googleon:\\sall-->");
    boost::sregex_iterator start(str.begin(),str.end(),reg);
    if(start == boost::sregex_iterator()) ::Beep(2000,500);
    else cout << (*start)[1] << endl;
    system("pause");
На вход
Code
1
<!--googleoff: all-->Text<!--googleon: all-->
Но слышу Beep. В чем проблема? Если убрать везде пробелы, то все нормально выводит; если \\s заменить на \s, то то же самое

Добавлено через 2 минуты
Regex tester говорит, что все нормально

Добавлено через 4 часа 58 минут
Если кто знает решение проблемы, то интересно было бы услышать, а я решил воспользоваться средствами Qt, в которой все нормально работает
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.06.2013, 22:00
Ответы с готовыми решениями:

RegEx Boost
Доброго времени суток. Ребята у меня во время выполнения программы, сама программа ругается на регулярное выражение. Может кто сталкивался,...

Regex - работа с файлом
Добрый день! Хочу распарсить стартовую страничку META, счачал и сохранил ее в текстовый файл &quot;meta.txt&quot; с помощью WinInet.h,...

Проблема с boost-regex
Код программы: #include &lt;iostream&gt; #include &lt;boost/regex.hpp&gt; using namespace std; int main() { boost::regex...

11
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
04.06.2013, 09:19
BuGi,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <boost/regex.hpp>
 
int main()
{
    const std::string str = "<!--googleoff: all-->Text<!--googleon: all-->";
    boost::regex reg("<!--googleoff:\\sall-->([^<]*)<!--googleon:\\sall-->");
    boost::sregex_iterator start(str.begin(),str.end(),reg);
    if (start == boost::sregex_iterator())
    {
       std::cout << "Not finded" << std::endl;
    }
    else
    {
       std::cout << (*start)[1] << std::endl;
    }
}
Bash
1
2
3
forever@pterois:~/My_projects/cpp_pro$ g++ -o new new.cpp -lboost_regex
forever@pterois:~/My_projects/cpp_pro$ ./new
Text
Ваша проблема элементарна и буст к ней никак не относится. Чтобы считать в строку текст с пробелами нужно использовать std::getline. Ну или поставить флажок на cin, чтобы он не пропускал пробелы.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <boost/regex.hpp>
#include <iostream>
#include <string>
 
int main()
{
    std::string str;
    std::getline(std::cin, str);
    //"<!--googleoff: all-->Text<!--googleon: all-->";
    boost::regex reg("<!--googleoff:\\sall-->([^<]*)<!--googleon:\\sall-->");
    boost::sregex_iterator start(str.begin(),str.end(),reg);
    if (start == boost::sregex_iterator())
    {
       std::cout << "Not finded" << std::endl;
    }
    else
    {
       std::cout << (*start)[1] << std::endl;
    }
}
Bash
1
2
3
forever@pterois:~/My_projects/cpp_pro$ ./new
<!--googleoff: all-->Text<!--googleon: all-->
Text
1
25 / 25 / 11
Регистрация: 02.01.2012
Сообщений: 371
06.06.2013, 00:14  [ТС]
Да, так и есть) Спасибо

Добавлено через 10 часов 27 минут
И еще маленький вопрос: у меня в памяти лежит http-страничка (ответ от сайта), мне надо распарсить кое-что, но это лежит на разных строках. Надо использовать только \\n или \\n\\r?

Добавлено через 2 часа 25 минут
Сделал, не используя \\r

Добавлено через 22 часа 54 минуты
Нет раздела с алгоритмами, поэтому спрошу тут
Есть регекс
Code
1
<span\sclass="emphasis">((?!span).+)<\/span>
Есть код хтмл
Code
1
<span class="emphasis">Something</span><input type="submit" name="edit.x" value="Edit" class="btnLink btnMake"><input type="submit" name="remove.x" value="Remove" class="btnLink btnMake"></td><td><span class="small"></span>
Но я на выходе получаю
Code
1
Something</span><input type="submit" name="edit.x" value="Edit" class="btnLink btnMake"><input type="submit" name="remove.x" value="Remove" class="btnLink btnMake"></td><td><span class="small">
а жду просто Something.
Дело в том, что нужно выдрать кусок между спанами, там могут быть другие символы и теги хтмл
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
06.06.2013, 00:30
BuGi, Все же лучше
Code
1
((?!span)[^<]+)
ИМХО.
1
25 / 25 / 11
Регистрация: 02.01.2012
Сообщений: 371
06.06.2013, 00:32  [ТС]
Цитата Сообщение от ForEveR Посмотреть сообщение
BuGi, Все же лучше
Code
1
((?!span)[^<]+)
ИМХО.
там могут быть другие символы и теги хтмл
Если б не было тегов, а так ничего не работает)
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
06.06.2013, 00:39
BuGi, Да, согласен, не досмотрел. Почему бы не привести html к каноническому xml убрав лишние теги и не распарсить в xml документ, чем регексом разыскивать?
Сходу фиг сообразишь, попробую завтра подумать.

Есть стойкое ощущение, что look-ahead не поможет. Вопрос, в строке может быть конкретное кол-во <span></span> или же сколько угодно?
1
 Аватар для cyberbrain1000
23 / 23 / 14
Регистрация: 15.04.2013
Сообщений: 62
06.06.2013, 10:24
C++
1
"<span.*?>(.*?)</span>"
2
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
06.06.2013, 10:46
cyberbrain1000, Браво. Все гениальное просто.
1
25 / 25 / 11
Регистрация: 02.01.2012
Сообщений: 371
06.06.2013, 11:04  [ТС]
Да нет, нет)
У меня штук 20 этих спанов, но нужно найти именно содержимое между <span class="emphasis"></span>
Если бы был один, то я уж догадался бы))
0
 Аватар для cyberbrain1000
23 / 23 / 14
Регистрация: 15.04.2013
Сообщений: 62
06.06.2013, 11:07
тогда так, конечно же
C++
1
"<span class=\"emphasis\">(.*?)</span>"
0
25 / 25 / 11
Регистрация: 02.01.2012
Сообщений: 371
06.06.2013, 13:06  [ТС]
У меня все вылазит за пределы первого спана.
На самом деле, у меня между спанами только <br> теги. Можно было бы заменить их на пробелы, а потом парсить
Code
1
"<span\\sclass=\"emphasis\">[^<]*<\\/span>"
как-то так

Добавлено через 27 минут
Заработало) Если бы были другие теги и их нужно было сохранить, то такое бы не прошло

Добавлено через 1 час 28 минут
И последний наверно вопрос
Regex
Code
1
[^\d]+([^\n<]+)
Code
1
Someword 1234
Output
Code
1
omeword 1234
Хочу в этой строке убрать все до первого числа, а остальное получить, но почему-то не работает
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
06.06.2013, 14:41
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <string>
 
#include <boost/regex.hpp>
 
int main()
{
   boost::regex re("[^\\d]+([^\n<]+)");
   const std::string value = "Someword 1234<";
   boost::smatch match;
   boost::regex_search(value, match, re);
   std::cout << match[1] << std::endl;
}
Bash
1
2
./new
1234
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.06.2013, 14:41
Помогаю со студенческими работами здесь

Не собирается проект с boost::regex
Установил boost, подключил все к Dev-C++(в параметрах компилятора в библиотеки добавил C:\Boost\lib, в включаемые файлы С++...

Как сравнивать regex выражения?
std::vector &lt;std::regex&gt; lex; lex.push_back(std::regex(&quot;^()*&quot;)); lex.push_back(std::regex(&quot;^()*&quot;)); Вот как сравнить два...

Регулярные выражения Boost::regex
Всем привет! Юзаю библиотеку boost. В частности boost::regex. Столкнулся с такой проблемой. Как заставить библиотеку обрабатывать...

Регулярные выражения Boost::regex
Всем привет, разбирал пример с учебника (регулярные выражения) и столкнулся не понятным явлением. Задание: Выбрать номера только такого...

Необработанное исключение Boost::Regex
Только начал изучение буста - решил начать с регулярных выражений, т.к. они в данный момент требуются. Всё собрал, установил, во время...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru