科学计数法
例如,字符串["+100","5e2","-123","3.1416","-1E-16"]都表示数值。
但是["12e","1a3.14","1.2.3","+-5","12e+4.3"]都不是数值。
^\\s*[+-]?( (\\d+(\\.\\d+)?) | (\\.\\d+)|(\\d+\\.) )([Ee][+-]?\\d+)?\\s*$
1. \s* 匹配0或者多个空格
2. [+-]? 0个或者1个+或者-
3.(\\d+(\\.\\d+)?) | (\\.\\d+)|(\\d+\\.)
-\\d+(\\.\\d+)?): 匹配一个数字n或者 如果有小数点匹配 n.xxxx--小数点前后都有数字
-(\\.\\d+) : 小数点前没有数字,匹配 .xxxxx
-(\\d+\\.): 小数点后没有数字, 匹配 n.
-以上只走一个分支
4.([Ee][+-]?\\d+)?
-如果没有E或者e不会走这个语句------?---匹配0或者1个括号里面的
-[Ee]---只匹配一个
-[+-]?---0个或者1个+或-
-d+:1一个或者多个数字---有E后面肯定有数字
5.\\s* -0个或者多个空格
6.^--以xxx开头,$-以XXX结尾----可有可无,没有也可以编译通过
#include <sstream>
#include <regex>
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param str string字符串
* @return bool布尔型
*/
bool isNumeric(string str) {
// write code here
// if(str == "+")return false;
// if(str == ".")return false;
// remove_if(str.begin(), str.end(), ::isspace);
std::regex reg("^\\s*[+-]?((\\d+(\\.\\d+)?)|(\\.\\d+)|(\\d+\\.))([Ee][+-]?\\d+)?\\s*$");
bool result = std::regex_match(str, reg);
return result;
}
};