使用 QRegExp 的 Ingore 字符串
Ingore string using QRegExp
我有一个格式如下的字符串
qString 路径 = https://user:pass@someurl.com
我想使用 QRegExp 从上述路径中输入用户名和密码。
还处理了以下案例
1. qString path = http://user:pass@someurl.
在下面的情况下,如果不包含任何用户名或密码,则 return 字符串
2. qString path = https://someurl.com
我的代码使用 http 和 https,有没有最好的方法来做到这一点是简短的方式。请推荐
f(Path.startsWith("https://") == true)
{
QRegExp UserPwd("(.*)(https://)(.*)(.*)", Qt::CaseInsensitive, QRegExp::RegExp);
QRegExp UserPwd1("(.*)(https://)(.*)@(.*)", Qt::CaseInsensitive, QRegExp::RegExp);
if(UserPwd1.indexIn(ErrorString) != -1)
{
(void) UserPwd1.indexIn(Path);
return UserPwd1.cap(1) + UserPwd1.cap(2) + UserPwd1.cap(4);
}
else
{
(void) UserPwd.indexIn(Path);
return UserPwd.cap(1) + UserPwd.cap(2) + UserPwd.cap(3);
}
}
else
{
QRegExp UserPwd("(.*)(http://)(.*)@(.*)", Qt::CaseInsensitive, QRegExp::RegExp);
(void) UserPwd.indexIn(Path);
return UserPwd.cap(1) + UserPwd.cap(2) + UserPwd.cap(4);
}
可以使用QUrl
来实现
以下函数操作 URL authority 格式
QUrl GetFixedUrl(const QUrl & oUrl )
{
QUrl oNewUrl = oUrl;
// Reset the user name and password
oNewUrl.setUserName(QString());
oNewUrl.setPassword(QString());
// Save the host name
QString oHostName = oNewUrl.host();
// Clear authority
oNewUrl.setAuthority(QString());
// Set host name
oNewUrl.setHost(oHostName);
return oNewUrl;
}
然后调用它
QUrl oUrl("https://user:pass@someurl.com");
std::cout<< GetFixedUrl(oUrl).toString().toStdString()<< std::endl;
输出将是:
https://someurl.com
我建议两种方法。您可以选择一个更方便、更适合您的:
使用正则表达式
QString removeAuthority1(const QString &path)
{
QRegExp rx("((http|https|ftp):\/\/)(.*@)?(.*)");
if (rx.indexIn(path) != -1) {
return rx.cap(1) + rx.cap(4);
}
return QString();
}
使用 QUrl
QString removeAuthority2(const QString &path)
{
QUrl url = QUrl::fromUserInput(path);
return url.scheme() + "://" + url.host();
}
用法
QString path("http://user:pass@someurl.com");
QString s1 = removeAuthority1(path); // http://someurl.com
QString s2 = removeAuthority2(path); // http://someurl.com
我有一个格式如下的字符串
qString 路径 = https://user:pass@someurl.com
我想使用 QRegExp 从上述路径中输入用户名和密码。 还处理了以下案例
1. qString path = http://user:pass@someurl.
在下面的情况下,如果不包含任何用户名或密码,则 return 字符串
2. qString path = https://someurl.com
我的代码使用 http 和 https,有没有最好的方法来做到这一点是简短的方式。请推荐
f(Path.startsWith("https://") == true)
{
QRegExp UserPwd("(.*)(https://)(.*)(.*)", Qt::CaseInsensitive, QRegExp::RegExp);
QRegExp UserPwd1("(.*)(https://)(.*)@(.*)", Qt::CaseInsensitive, QRegExp::RegExp);
if(UserPwd1.indexIn(ErrorString) != -1)
{
(void) UserPwd1.indexIn(Path);
return UserPwd1.cap(1) + UserPwd1.cap(2) + UserPwd1.cap(4);
}
else
{
(void) UserPwd.indexIn(Path);
return UserPwd.cap(1) + UserPwd.cap(2) + UserPwd.cap(3);
}
}
else
{
QRegExp UserPwd("(.*)(http://)(.*)@(.*)", Qt::CaseInsensitive, QRegExp::RegExp);
(void) UserPwd.indexIn(Path);
return UserPwd.cap(1) + UserPwd.cap(2) + UserPwd.cap(4);
}
可以使用QUrl
来实现以下函数操作 URL authority 格式
QUrl GetFixedUrl(const QUrl & oUrl )
{
QUrl oNewUrl = oUrl;
// Reset the user name and password
oNewUrl.setUserName(QString());
oNewUrl.setPassword(QString());
// Save the host name
QString oHostName = oNewUrl.host();
// Clear authority
oNewUrl.setAuthority(QString());
// Set host name
oNewUrl.setHost(oHostName);
return oNewUrl;
}
然后调用它
QUrl oUrl("https://user:pass@someurl.com");
std::cout<< GetFixedUrl(oUrl).toString().toStdString()<< std::endl;
输出将是:
https://someurl.com
我建议两种方法。您可以选择一个更方便、更适合您的:
使用正则表达式
QString removeAuthority1(const QString &path)
{
QRegExp rx("((http|https|ftp):\/\/)(.*@)?(.*)");
if (rx.indexIn(path) != -1) {
return rx.cap(1) + rx.cap(4);
}
return QString();
}
使用 QUrl
QString removeAuthority2(const QString &path)
{
QUrl url = QUrl::fromUserInput(path);
return url.scheme() + "://" + url.host();
}
用法
QString path("http://user:pass@someurl.com");
QString s1 = removeAuthority1(path); // http://someurl.com
QString s2 = removeAuthority2(path); // http://someurl.com