У меня есть некоторые трудности в понимании условных выражений в регулярных выражениях.
После прочтения Условных выражений If-Then-Else в регулярных выражениях Я решил написать простой тест. Я использую C ++, Boost 1.38 Regex и MS VC 8.0.
Я написал эту программу:
#include <iostream>
#include <string>
#include <boost/regex.hpp>
int main()
{
std::string str_to_modify = "123";
//std::string str_to_modify = "ttt";
boost::regex regex_to_search ("(\\d\\d\\d)");
std::string regex_format ("(?($1)$1|000)");
std::string modified_str =
boost::regex_replace(
str_to_modify,
regex_to_search,
regex_format,
boost::match_default | boost::format_all | format_no_copy );
std::cout << modified_str << std::endl;
return 0;
}
Я ожидал получить "123", если str_to_modify
имеет "123", и получить "000", если у меня str_to_modify
есть "ttt". Однако я получаю 123123 000 в первом случае и ничего во втором.
Coluld, скажи мне, пожалуйста, что не так с моим тестом?
Второй пример, который все еще не работает:
#include <iostream>
#include <string>
#include <boost/regex.hpp>
int main()
{
//std::string str_to_modify = "123";
std::string str_to_modify = "ttt";
boost::regex regex_to_search ("(\\d\\d\\d)");
std::string regex_format ("(?1foo:bar");
std::string modified_str =
boost::regex_replace(str_to_modify, regex_to_search, regex_format,
boost::match_default | boost::format_all | boost::format_no_copy );
std::cout << modified_str << std::endl;
return 0;
}