Roger571
Известный
- 58
- 31
Пытаюсь разобраться, как работать с boost::regex и в процессе захотелось написать более удобную обертку под свои нужды. Но есть одно но, никак не могу понять почему объект boost::smatch невалидно передается по ссылке.
Вот сам код:
А вот результат его выполнения:
И далее идет краш "Expression: string iterators incompatible".
Хотелось бы разобраться, что же все-таки не так
Вот сам код:
C++:
#include "main.h"
bool easyRegex(std::string sString, boost::regex rRegex, boost::smatch &sResults, int iArg, char *szRegexName)
{
if (boost::regex_search(sString, sResults, rRegex))
{
if (sResults.size() < iArg)
{
printf("Error %s! | Size: %d < %d\n", szRegexName, sResults.size(), iArg);
return false;
}
printf("[easyRegex] Pointer: %p\n", sResults);
printf("[easyRegex] Size: %d\n", sResults.size());
for (int i = 1; i < sResults.size(); i++)
printf("[easyRegex] [%d] %s\n", i, sResults.str(i).c_str());
return true;
}
else
{
printf("Error %s! | regex_search\n", szRegexName);
return false;
}
}
int main()
{
std::cout << "Hello!\n";
std::string sTest = "sdf 24 string 3452 43556aad";
boost::regex regex("\\w+ ([\\d]+) ([\\w]+) ([\\d]+) ([\\d\\w]+)");
boost::smatch result;
if (easyRegex(sTest, regex, result, 5, "test"))
{
printf("[main] Pointer: %p\n", result);
printf("[main] Size: %d\n", result.size());
for (int i = 1; i < result.size(); i++)
printf("[main] [%d] %s\n", i, result.str(i).c_str());
}
system("pause");
}
C++:
[easyRegex] Pointer: 03901658
[easyRegex] Size: 5
[easyRegex] [1] 24
[easyRegex] [2] string
[easyRegex] [3] 3452
[easyRegex] [4] 43556aad
[main] Pointer: 03901658
[main] Size: 5
И далее идет краш "Expression: string iterators incompatible".
Хотелось бы разобраться, что же все-таки не так