我想要一个正则表达式模式在字符串中找到任何整数,但不要浮点数(小数点为“。”或“,”。因此对于字符串:

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]|$)

09-30 19:20
查看更多