Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > pcrecpp


Автор: box 8.4.2015, 00:06
всем привет!
помогите разобрать строку на подстроки
строка:
03/21/2015-16:02:33.468684  [Drop] [**] [1:2013057:3] ET WEB_SERVER Inbound PHP User-Agent [**] [Classification: Attempted Information Leak] [Priority: 2] {TCP} 67.22.140.100:40717 -> 10.10.50.100:80
надо взять все что между [**]...........[**] и так же вырезать 67.22.140.100:40717 -> 10.10.50.100:80
подскажите регулярку что бы ее можно было применить так:
Код

  pcrecpp::RE re("/\[\*\*\](\\w+)\[\*\*\]/g");//вот так вообще ничего не находит  
       if (re.error().length() > 0) {
          cout << "PCRE compilation failed with error: " << re.error() << "\n";
       }
       if (re.FullMatch(data, &s))
       cout << s  << "\n";

Автор: rudolfninja 8.4.2015, 11:12
Я не уверен, но регулярка должна быть такой: 
Код

\[\*\*\](.*)\[\*\*\].*\{TCP\}(.*)

По крайней мере, https://regex101.com/#javascript выдает правильные результаты по такой регулярке и заданной строке.

Автор: xvr 8.4.2015, 12:39
2 ТС: Не забудьте удвоить все '\' в исходной С++ строке. Обратный слэш имеет для самого С++ компилятора вполне особое значение, и в своем чистом виде в конечное содержимое строки не попадает

Автор: kemiisto 8.4.2015, 13:52
Цитата(xvr @  8.4.2015,  11:39 Найти цитируемый пост)
2 ТС: Не забудьте удвоить все '\' в исходной С++ строке.

Или https://solarianprogrammer.com/2011/10/16/cpp-11-raw-strings-literals-tutorial/. smile 

Автор: box 8.4.2015, 14:31
не работает 
Код

  pcrecpp::RE re("\\[\\*\\*\\](.*)\\[\\*\\*\\].*\\{TCP\\}(.*)");  

и так тоже
Код

  pcrecpp::RE re("^.*\\[\\*\\*\\](.*)\\[\\*\\*\\].*\\{TCP\\}(.*)$");  
 
не работает ни одна перл совместимая регулярка!
что же оно хочет?

Автор: rudolfninja 8.4.2015, 17:04
Попробуйте как посоветовал kemiisto.
Цитата(kemiisto @  8.4.2015,  13:52 Найти цитируемый пост)
Или использовать raw string literal.

То есть так:

Код

pcrecpp::RE re(R"\[\*\*\](.*)\[\*\*\].*\{TCP\}(.*)");  

Автор: box 8.4.2015, 18:27
suric.cpp:333:18: error: invalid character '\' in raw string delimiter
suric.cpp:333:1: error: stray ‘R’ in program

Автор: box 8.4.2015, 18:49
вопрос решен:
Код

  pcrecpp::RE re("^.*\\[\\*\\*\\](.*)\\[\\*\\*\\].*\\{TCP\\}(.*)$", pcrecpp::UTF8());  

всем спасибо)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)