// 带端口号的IP地址
QStringList getIpAddressAndPort(const QString & strText)
{
QStringList strList;
QRegExp rx("(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)\\.(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)\\.(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)\\.(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)\\:\\d{1,5}");
QString strRemain = strText;
int nPos = rx.indexIn(strRemain);
int nLenth = rx.matchedLength();
while (nPos >= 0 && nLenth > 0)
{
strList.push_back(strRemain.mid(nPos, nLenth));
strRemain = strRemain.mid(nPos + nLenth, strRemain.length() - (nPos + nLenth));
nPos = rx.indexIn(strRemain);
nLenth = rx.matchedLength();
}
return strList;
}
// 不带端口号的IP地址
QStringList getIpAddress(const QString & strText)
{
QStringList strList;
QRegExp rx("(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)\\.(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)\\.(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)\\.(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)");
QString strRemain = strText;
int nPos = rx.indexIn(strRemain);
int nLenth = rx.matchedLength();
while (nPos >= 0 && nLenth > 0)
{
strList.push_back(strRemain.mid(nPos, nLenth));
strRemain = strRemain.mid(nPos + nLenth, strRemain.length() - (nPos + nLenth));
nPos = rx.indexIn(strRemain);
nLenth = rx.matchedLength();
}
return strList;
}
1、注意事项:C++中的正则表达式 需要\\, ‘\’字符在C++中是转义字符
2、带端口号的IP地址后面:\\d{1,5} ,这个可以修改的更精确,这里判断的是1到2位数字,实际端口是1-65535

538

被折叠的 条评论
为什么被折叠?



