c++正则表达式

C++ Regular Expressions

本文关键字:正则表达式 c++      更新时间:2023-10-16

我是正则表达式的新手-我在c++中使用Poco从字符串中提取IP地址,并(尝试)将所有IP匹配放入字符串向量中:

string result = tcpClient.receiveRaw();
RegularExpression re("b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)b");
RegularExpression::MatchVec matches;
re.match(result, 0, matches);
IPlist = result.substr(matches[1].offset, matches[1].length);

我不认为最后一行是正确的(不确定它是如何工作的)我试图从初始字符串拉所有的IP地址,并将它们添加到字符串向量。

表达式可以缩短,b可能需要另一个escape(但我不熟悉Poco,所以我可能会离开)。试一下:

RegularExpression re("\b((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b");

为什么不直接使用C POSIX正则表达式呢?下面是文档:

http://pubs.opengroup.org/onlinepubs/007908799/xsh/regcomp.html

除此之外,这里到底出了什么问题?你没有具体说明实际问题。我不熟悉你使用的类,但看起来没什么明显的问题,除了我们不知道IPlist是什么。它看起来是一个列表,但被设置为等于单个字符串值。我怀疑这里的逻辑可能不可取。