Форум программистов, компьютерный форум, киберфорум
Boost C++
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
0 / 0 / 1
Регистрация: 15.05.2012
Сообщений: 3
1

Не работает регэкс, содержащий ", VS2010, boost 1.52.0

09.11.2012, 10:20. Показов 1649. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
VisualStudio 2010, boost 1.52.0. При попытке поиска по регэкспу "(?<=HandleId\"\>).*(?=\<\/Data\>)" ничего не находится! текст, по которому ищем:
XML
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
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
<System>
  <Provider Name="Microsoft-Windows-Security-Auditing" Guid="{54849625-5478-4994-A5BA-3E3B0328C30D}" /> 
  <EventID>4663</EventID> 
  <Version>0</Version> 
  <Level>0</Level> 
  <Task>12800</Task> 
  <Opcode>0</Opcode> 
  <Keywords>0x8020000000000000</Keywords> 
  <TimeCreated SystemTime="2012-11-07T16:12:50.329096600Z" /> 
  <EventRecordID>2660</EventRecordID> 
  <Correlation /> 
  <Execution ProcessID="4" ThreadID="68" /> 
  <Channel>Security</Channel> 
  <Computer>Programmer.it.loc</Computer> 
  <Security /> 
  </System>
<EventData>
  <Data Name="SubjectUserSid">S-1-5-18</Data> 
  <Data Name="SubjectUserName">PROGRAMMER$</Data> 
  <Data Name="SubjectDomainName">IT</Data> 
  <Data Name="SubjectLogonId">0x3e7</Data> 
  <Data Name="ObjectServer">Security</Data> 
  <Data Name="ObjectType">File</Data> 
  <Data Name="ObjectName">C:\Windows\rescache\rc0003\Segment3.toc</Data> 
  <Data Name="HandleId">0x124</Data> 
  <Data Name="AccessList">%%1537</Data> 
  <Data Name="AccessMask">0x10000</Data> 
  <Data Name="ProcessId">0x15a0</Data> 
  <Data Name="ProcessName">C:\Windows\System32\mcbuilder.exe</Data> 
  </EventData>
  </Event>
код, который ищет
C++
1
2
3
4
5
6
7
#include <boost/regex.hpp>
boost::wregex get_handle_id (L"(?<=HandleId\"\>).*(?=\<\/Data\>)");
boost::match_results<std::wstring::const_iterator> result;
sss = pRenderedContent;
boost::regex_search(sss,result,get_handle_id);
wstring_to_string(result[0],HandleID);      
std::cout << HandleID << std::endl;
все строки wstring, не работает конкретно при наличии кавычки " в регекспе. как его забороть? Регэксп проверял здесь http://regexpr.ru/, тут работает. По идее, они же везде перловские, почему тогда не пашет?

Добавлено через 57 минут
Мужики, это жесть, stl::find тоже не находит эту фигню!
C++
1
2
3
4
5
6
7
8
9
std::wstring SearchOnDataByTag (std::wstring input, std::wstring stag)
{
    int position1, position2;
    position1 = input.find(stag,0) + stag.length()+2;       //учитываем кавычки и закрывающий тег
    position2 = input.find(L"</Data>",position1);
    return(input.substr(position1,position2));
}
handleid = SearchOnDataByTag (pRenderedContent,L"HandleID");
//получаем handleid - подстрока лога XML выше от 9(!) символа, до 628го, что вообще бред
Добавлено через 17 минут
про find сам дурак, про регистр забыл, с find работает
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.11.2012, 10:20
Ответы с готовыми решениями:

Код для C++11 в VS2010. Boost
Доброго дня! Пытаюсь использовать кольцевой буфер отсюда:...

HTTPS запрос к Telegram API с Boost Beast & Boost Asio (Не работает)
#include &quot;root_certificates.hpp&quot; #include &lt;boost/beast/core.hpp&gt; #include...

C# VS2010 мот кто скинит книгу или ссылку даст на скачку?? (vs2010 rus)
C# VS2010 мот кто скинит книгу или ссылку даст на скачку?? (vs2010 rus)

Не работает getline в VS2010
Исходник: #include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; int main(){ ...

Не работает WPF на VS2010
Не показывает дизайн, по середке табличка проблем лоодинг типо исправте ошибки и перезагрузите. Но...

1
2848 / 1997 / 986
Регистрация: 21.12.2010
Сообщений: 3,705
Записей в блоге: 10
09.11.2012, 10:33 2
слеш и угловые скобки вроде бы не являются спецсимволами и не требуют экранирования, кроме того, регекс по-умолчанию жадный и захватит всё от HandleId\"> до последнего тега </Data>, а нужно, как я понял 0x124. Вообще, вот так работает
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
#include <iostream>
#include <fstream>
#include <iterator>
#include <boost/regex.hpp>
 
int main()
{
    std::wifstream ifs("in.txt");
    if(ifs.is_open())
    {
        std::wstring s((std::istreambuf_iterator<wchar_t>(ifs)), std::istreambuf_iterator<wchar_t>());
        std::wcout << s << std::endl;
        boost::wsmatch res;
        boost::wregex reg(L"(?<=HandleId\">)[^<>]*?(?=</Data>)");
        std::wcout << reg.str() << std::endl;
        if(boost::regex_search(s, res, reg))
        {
            std::wcout << res[0] << std::endl;
        }
        else
            std::cerr << "regex_search failed" << std::endl;
        ifs.close();
    }
    else
        std::cerr << "Unable to open file" << std::endl;
    return 0;
}
0
09.11.2012, 10:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.11.2012, 10:33
Помогаю со студенческими работами здесь

Не работает надстройка Word созданная в VS2010
Добрый день. Сделал надстройку в VS 2010, на моем ПК она работает, проверил на нескольких...

Не работает sort с предикатом для list в VS2010
Компилит, но в ходе выполнения ошибка....

VS2010 .Net4 не работает опция - Автоматически отображать список членов
Привет форумчане! Возникли затруднения при переходе на VS2010 с автоматическим отображением списка...

Как работает boost::any?
Не могу никак понять, как он работает. Создал тестовый пример: #include &lt;boost/any.hpp&gt;...

с wxdev boost работает?
с wxdev boost работает?

Не работает SSL в Boost
Здравствуйте. Пытаюсь написать программу для подключения к серверу. #include &lt;boost/asio.hpp&gt;...


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

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