问个字符串截取提取的有关问题

问个字符串截取提取的问题
        假如现在有一个数据库连接字符串:
        CString strExample = _T(“server=localhost;database=db01; uid=sa;password=abc123;~other”);
        我要从这个字符串中提取出password的值(即password=后面~之前的值),这个其实很简单。但是由于这个字符串中password可以写成大小写混杂,也可以写成pwd或者Pwd之类的(这样写ado都是可以支持的),还可以用“~”分割配置两个数据库连接,比如"server=localhost;database=db01; uid=sa;password=aBc123;~server=localhost;database=db03; User ID=test;PWd=xyXZ987;~other"。请问面对这些情况下,该怎么才能比较简单的提取出password的值呢?
------解决思路----------------------
找个正则高手应该不难
------解决思路----------------------
用正则表达式容易实现,赶快投入到正则表达式的学习中把,以后经常用
------解决思路----------------------
正则表达式吧,c++11已经支持了。
------解决思路----------------------
把字符串全部转换成大写或小写,
再比较password=或pwd=
------解决思路----------------------
不会正则那也可以用简单的方式取得关键字如password,然后再取得=后的密码串吧(以;结尾)!
------解决思路----------------------
不复杂,有特征啊,比如每个参数都是分号分隔,还有等号之后的就是参数值,这些特征就差不多够了,将等号之前分号之后的参数名都转换为小写,然后和password或者pwd比较,就可以提取密码段了
------解决思路----------------------
写了一个函数,仅供参考
void FindPwd(CString str ,std::vector<CString> &vec)  // 将str中的密码字段内容保存在vec容器中
{
int pos3 = 0;
int pos1 = str.Find("=" ,pos3);
int pos2 = str.Find(";" ,pos1+1);
while (pos1 != -1)
{
CString szAttr = str.Mid(pos3 ,pos1 - pos3);
CString szValue = str.Mid(pos1+1 ,pos2-pos1-1);
szAttr.Trim();
szValue.Trim(); // szValue可以不去空格,因为密码前后可能会有空格吧
szAttr.MakeLower(); // 转换为小写
if (szAttr.GetAt(0) == '~')
{
szAttr.Right(szAttr.GetLength()-1);
}
if (szAttr == "password" 
------解决思路----------------------
 szAttr == "pwd")
{
vec.push_back(szValue);
}
printf("%s = %s\n" ,szAttr ,szValue); // 测试,打印出来看看
pos3 = pos2+1;
pos1 = str.Find("=" ,pos3);
pos2 = str.Find(";" ,pos1+1);
}
}


int _tmain(int argc, _TCHAR* argv[])
{
CString strExample = _T("server=localhost;database=db01; uid=sa;password=abc123;~server=localhost;database=db03; User ID=test;PWd=xyXZ987;");

std::vector<CString> vec;
FindPwd(strExample ,vec);
return 0;
}