C++ (Qt) QRegExp rx("cite\\{([\\w\\s,]*)\\}"); /* Вытаскивает всё содержимое команды \cite{} */ QRegExp rxAuthorRef("\\b(\\w+)\\b"); /* Из этого всего вытаскивает сами ссылки */ QString str("Note that the spectacular reentrant superconductivity" "predicted in 1997~\cite{Khusainov_97, Khusainov_97_PRB}" "has been recently observed experimentally in the Nb/CuNi" "bilayer~\cite{Zdravkov_06}."); QStringList authorsRef; /* Список всех ссылок */ int pos = 0; while (pos >= 0) { if ((pos = rx.indexIn(str, pos)) >= 0) { QString s = rx.cap(1); /* s - содержит всё содержимое команды \cite{} */ int pos2 = 0; while (pos2 >= 0) { /* В этом цикле извлекаем сами ссылки */ if ((pos2 = rxAuthorRef.indexIn(s, pos2)) >= 0) { QString author = rxAuthorRef.cap(1); authorsRef.append(author); /* засовываем их в список */ pos2 += author.size(); } } pos += s.size(); } } authorsRef.removeDuplicates(); qDebug() << authorsRef;
C++ (Qt)QRegExp rx("\\\\cite\\{(.+)\\}");QStringList authorsList;int pos = 0;while ((pos = rx.indexIn(str, pos)) != -1){ authorsList << rx.cap(1).split(", "); pos += rx.matchedLength();}
C++ (Qt)("Khusainov_97", "Khusainov_97_PRB}has been recently observed experimentally in the Nb/CuNibilayer~\cite{Zdravkov_06")
C++ (Qt)("Khusainov_97", "Khusainov_97_PRB", "Zdravkov_06")
C++ (Qt)QRegExp rx("\\\\cite\\{(.+)\\}");rx.setMinimal(true);
C++ (Qt)QRegExp rx("cite\\{[^\\}](?=\\})");QStringList authorsList;int pos = 0;while ((pos = rx.indexIn(str, pos)) != -1){ authorsList << rx.cap(1).split(", "); pos += rx.matchedLength();}
C++ (Qt)authorsList << rx.cap(1).split(QRegExp(",\\s*"));
C++ (Qt)QRegExp rx("cite\\{\\s*([^\\s].+)\\}");