Ранее мы уже выясняли, что C++ никогда не умрет , и знать низкоуровневые вещи приходится , даже если фултайм пишешь на Scala. Поэтому я решил уделять некоторое время пописыванию небольших программок на C/C++. Тем более, что с тех пор, когда я активно этим делом увлекался, прошло уже лет семь-восемь и многое сильно изменилось. Так, например, в стандартной библиотеке C++ появились регулярные выражения, пример работы с которыми и приводится в этом посте.
Рассмотрим следующую проблему. Есть сервер, на котором поднят Nginx . Этот Nginx раздает какие-то mp3-файлы. Стоит задача определить, какие файлы и сколько раз были скачаны. Возможное решение на C++:
#include <iostream>
#include <map>
#include <regex>
#include <algorithm>
int main ( int argc, char ** argv ) {
const std :: regex re ( » » GET (?:http://.+?/)?(.+? \ .mp3) «»
«»HTTP/1 \ .[01] «» \ d{3} ( \ d+)»» ) ;
std :: map < std :: string std :: pair < long long >> stat ;
for ( std :: string line ; std :: getline ( std :: cin line ) ; ) {
std :: smatch match ;
if ( std :: regex_search ( line