Страницы

Поиск по вопросам

четверг, 23 января 2020 г.

Как получить часть строки, соответствующей регулярному выражению

#cpp #регулярные_выражения


Мне нужно с помощью регулярного выражения взять только то, что в квадратных скобках.
Например:

example = [5 13 2 -7]


С помощью такого "\\[.*\\]" регулярного выражения я могу получить "[5 13 2 -7]",
но мне нужно исключить эти скобки как бы, то есть получить "5 13 2 -7". Конечно, я
бы мог удалять первый и последний символы, но вдруг можно их вообще не брать. ECMAScript
синтаксис.
    


Ответы

Ответ 1



Достаточно скобки добавить и заэкранировать слэш, который в обычной C++ строковой константе также специальный смысл имеет, то есть вместо "\[" следует писать "\\[", чтобы в regex передать, или использовать R"( константы (raw string literal), в которых не нужно слеш экранировать: #include #include int main() { const std::string s = "example = [5 13 2 -7]"; std::smatch match; std::regex re(R"(\[([^\]]*)\])"); if (std::regex_search(s, match, re)) std::cout << "match: '" << match[1] << "'\n"; } Пример: $ g++ -std=c++11 *.cc && ./a.out match: '5 13 2 -7' Я поменял регулярное выражение внутри на [^]]* вместо .*, чтобы результат скобки не содержал. Альтернативно, можно .*? использовать.

Комментариев нет:

Отправить комментарий