- regex, извлечь строку, skb7, 01:07 , 19-Янв-12 (1)
> Есть строка вида .price+10*200+.summ45*.total > Необходимо извлечь все переменные, т.е. на выходе чтоб был массив > .price > .summ45 > .total > Т.е. шаблон ".[любыебуквыиличисла]" > Не понимаю, как указать, чтобы он брал только символы [0-9a-zA-z] #include <cstdlib> #include <iostream> #include <string> #include <boost/regex.hpp> int main() { // Интересующее тебя выражение; \w - это любая цифра, буква или '_' boost::regex expression("(\\.[a-zA-Z]\\w*)"); // Твоя строка std::string s(".price+10*200+.summ45*.total"); // Переменные для поиска std::string::const_iterator start = s.begin(); std::string::const_iterator end = s.end(); boost::match_results<std::string::const_iterator> what; boost::match_flag_type flags = boost::match_default; // Поиск while (boost::regex_search(start, end, what, expression, flags)) { // Можешь формировать здесь массив найденных строк std::string findedString(what[1].first, what[2].second); std::cout << findedString << std::endl; // Обновление позиции поиска start = what[0].second; // Обновление флагов flags |= boost::match_prev_avail; flags |= boost::match_not_bob; } return EXIT_SUCCESS; }
- regex, извлечь строку, skb7, 01:13 , 19-Янв-12 (2)
Да, я там сделал чтобы первый символ был обязательно буквой, ведь для переменных принят именно такой синтаксис. Шаблон по вашему вопросу будет "(\\.\\w+)".P.S. Для облегчения написания подобных строк, чтобы не экранировать каждый раз обратный слеш, можете применить raw string literals, ввели в новом стандарте, C++11.
- regex, извлечь строку, Anonymouse, 03:35 , 19-Янв-12 (3)
ProgrammerZZZ ... :)The admin way: > echo ".price+10*200+.summ45*.total " | sed -n 's/\.[a-z][a-zA-Z0-9]*/\\ &\\ /gp' | grep '^\.' .price .summ45 .total > PS: Please be aware: you have to actually type 'Enter' after \\ in string 1 and 2. PPS: Or use perl
- regex, извлечь строку, skb7, 04:21 , 19-Янв-12 (4)
>[оверквотинг удален] >> echo ".price+10*200+.summ45*.total " | sed -n 's/\.[a-z][a-zA-Z0-9]*/\\ > &\\ > /gp' | grep '^\.' > .price > .summ45 > .total >> > PS: Please be aware: you have to actually type 'Enter' after \\ > in string 1 and 2. > PPS: Or use perl Можно обойтись без нажатия ENTER: >> echo '.price+10*200+.summ45*.total' | sed -n 's/\.[a-zA-Z]\w*/\n&\n/gp' | grep '^\.'
- regex, извлечь строку, anonimouse, 06:21 , 19-Янв-12 (5)
> Можно обойтись без нажатия ENTER: _только_ в GNU sed. А предложенный сверху вариант - пойдёт везде.
- regex, извлечь строку, Andrey Mitrofanov, 09:47 , 19-Янв-12 (6)
> Есть строка вида .price+10*200+.summ45*.total > Необходимо извлечь все переменные, т.е. на выходе чтоб был массив |egrep -o "\.[a-z][a-z0-9]*" или |egrep -o "\.[^+=* ]+" ,,,если лениво-быстро. > .price > .summ45 > .total
|