今天在讨论组有人提出这个话题,后来,为了测试,就做了一个初稿,简单的字符串还是可以找到的。
void
MainWindow::on_btnFindEmail_clicked()
{
QString t("<b>email@email.com</b>emaril:email2@email2.com email3@email3.com");
QString r("");
int p, p1=-1, p2=-1, lastPos=0;
bool endOfAll = false;
while(true){
p=t.indexOf('@', lastPos);
if(endOfAll)break;
if(p<0)break;
for(int i=p-1; i>0; i--){
if(t[i]=='>'
|| t[i]==' '
|| t[i]==' '
|| t[i]==' '
|| t[i]==' '
|| t[i]==':'){
p1=i+1;
break;
}
}
for(int i=p+1; i<t.size(); i++){
if(i==t.size()-1) {
endOfAll = true;
i++;
}
if(t[i]=='<'
|| t[i]==' '
|| t[i]==':'
|| endOfAll){
p2=i;
break;
}
}
if(p1>=0 && p2>=p1){
//应该将得到的结果对比Email地址的格式,如果正确,就是EMAIL地址,否则,就不是。
r.append(tr(" @=%1 p1=%2 p2=%3 ").arg(p).arg(p1).arg(p2) );
r.append( t.mid(p1, p2-p1) );
}
lastPos = p2+1;
p1=-1;
p2=-1;
}
ui.edResultEmail->setText(r);
}
[转自GOOGLE里面的一个QT论坛]
规则表达方式方法:
QStringList MainWindow::searchMail(QString text){
QRegExp reg("[A-z0-9_/.-]+@[A-z0-9/.]+");
int startPos=0;
int mailPos=0;
QStringList rs;
while(true){
mailPos=reg.indexIn(text,startPos);
if(mailPos<0)
{
break;
}
rs.append(reg.cap(0));
startPos=mailPos+rs.last().size();
}
return rs;
}
QString t("<b>email@email.com</b>emaril:email2@email2.com email3@email3.com");
QString r("");
int p, p1=-1, p2=-1, lastPos=0;
bool endOfAll = false;
while(true){
p=t.indexOf('@', lastPos);
if(endOfAll)break;
if(p<0)break;
for(int i=p-1; i>0; i--){
if(t[i]=='>'
|| t[i]==' '
|| t[i]==' '
|| t[i]==' '
|| t[i]==' '
|| t[i]==':'){
p1=i+1;
break;
}
}
for(int i=p+1; i<t.size(); i++){
if(i==t.size()-1) {
endOfAll = true;
i++;
}
if(t[i]=='<'
|| t[i]==' '
|| t[i]==':'
|| endOfAll){
p2=i;
break;
}
}
if(p1>=0 && p2>=p1){
//应该将得到的结果对比Email地址的格式,如果正确,就是EMAIL地址,否则,就不是。
r.append(tr(" @=%1 p1=%2 p2=%3 ").arg(p).arg(p1).arg(p2) );
r.append( t.mid(p1, p2-p1) );
}
lastPos = p2+1;
p1=-1;
p2=-1;
}
ui.edResultEmail->setText(r);
}
[转自GOOGLE里面的一个QT论坛]
规则表达方式方法:
QStringList MainWindow::searchMail(QString text){
QRegExp reg("[A-z0-9_/.-]+@[A-z0-9/.]+");
int startPos=0;
int mailPos=0;
QStringList rs;
while(true){
mailPos=reg.indexIn(text,startPos);
if(mailPos<0)
{
break;
}
rs.append(reg.cap(0));
startPos=mailPos+rs.last().size();
}
return rs;
}