Я чувствую, что это довольно простой вопрос, но я не нашел для него сообщения. Если вы знаете, пожалуйста, напишите ниже. Так что я пытаюсь сделать, это посмотреть через строку и извлечь числа в группах 2.Поиск числа между двумя номерами с использованием regex/boost в C++
вот мой код:
int main() {
string line = "P112233";
boost::regex e ("P([0-9]{2}[0-9]{2}[0-9]{2})");
boost::smatch match;
if (boost::regex_search(line, match, e))
{
boost::regex f("([0-9]{2})"); //finds 11
boost::smatch match2;
line = match[0];
if (boost::regex_search(line, match2, f))
{
float number1 = boost::lexical_cast<float>(match2[0]);
cout << number1 << endl; // this works and prints out 11.
}
boost::regex g(" "); // here I want it to find the 22
boost::smatch match3;
if (boost::regex_search(line, match3, g))
{
float number2 = boost::lexical_cast<float>(match3[0]);
cout << number2 << endl;
}
boost::regex h(" "); // here I want it to find the 33
boost::smatch match4;
if (boost::regex_search(line, match4, h))
{
float number3 = boost::lexical_cast<float>(match4[0]);
cout << number3 << endl;
}
}
else
cout << "found nothing"<< endl;
return 0;
}
Я был в состоянии получить первый номер, но у меня есть не знаю, как получить второй (22) и третий (33). Какое правильное выражение мне нужно использовать?
Если вы используете 3 группы захвата (т.е. '" P ([0-9] {2}) ([0-9] {2}) ([0- 9] {2}) "'), тогда вы можете просто получить доступ к 'match [i]', где 'i' - номер группы, которую вы хотите извлечь (я считаю, что' match [0] '- вся строка, , – Cornstalks
Да, совпадение [0] - вся строка. Кажется, я понимаю, что вы имеете в виду, но я никогда раньше не использовал группы захвата. матч [1, 2, 3 и т. д.] не имеют ничего. Я продолжаю получать эту ошибку 'terminate called после того, как вы выбрали экземпляр 'boost :: exception_detail :: clone_impl>' what(): bad lexical cast: значение типа источника может не следует интерпретировать как цель , можете ли вы дать мне дополнительную информацию? –
KH17