boost::regex
(или std::regex
, если у вас есть C ++ 0x);
вы можете определить, что вы хотите принять (например, в вашем контексте,
"0x12E" - это число или нет?) Для целых чисел C ++:
"\\s*[+-]?([1-9][0-9]*|0[0-7]*|0[xX][0-9a-fA-F]+)"
Для C ++ с плавающей точкой:
"\\s*[+-]?([0-9]+\\.[0-9]*([Ee][+-]?[0-9]+)?|\\.[0-9]+([Ee][+-]?[0-9]+)?|[0-9]+[Ee][+-]?[0-9]+)"
Но в зависимости от того, что вы делаете, вам может не понадобиться
поддерживать вещи, которые сложны. Два приведенных вами примера
покрыты
"[0-9]+(\\.[0-9]*)?"
например.
Если вам понадобится числовое значение позже, оно также может быть
так же просто преобразовать строку в istringstream
, и
сделать преобразование немедленно. Если нет ошибки, и вы
извлечь все символы, строка была числом; если не,
это не было Это даст вам меньше контроля над точным
формат, который вы хотите принять, однако.