我想要一个正则表达式模式在字符串中找到任何整数,但不要浮点数(小数点为“。”或“,”。因此对于字符串:
abc111.222dfg333hfg44.55
它应该只能找到:
333
我创建了正则表达式模式:
(?<!\\d[\\.,]|\\d)\\d+(?![\\.,]\\d+|\\d)
但是在C++ STL正则表达式中使用时失败。它引发异常:
Unhandled exception at at 0x76AF4598 in xxxxxx.exe: Microsoft C++ exception: std::regex_error at memory location 0x00C1F218.
但它在C#正则表达式类中效果很好
更新:
我的代码:
smatch intMatch;
regex e1("(?<!\\d[\\.,]|\\d)\\d+(?![\\.,]\\d+|\\d)");
string s("111.222dfg333hfg44.55");
regex_search ( s, intMatch, e1 );
但它会抛出异常:
regex e1("(?<!\\d[\\.,]|\\d)\\d+(?![\\.,]\\d+|\\d)");
更新2:
这两个答案都是正确的,但对于C++ STL regex Toto,效果更好。
最佳答案
我不确定C++ STL,但是许多regex风格不支持可变长度的负向后看。
就您而言,您可以简单地执行以下操作:
(?:^|[^.,\d])(\d+)(?:[^.,\d]|$)