Quale sarebbe il pattern QRegExp per catturare il testo quotato per QSyntaxHighlighter?
Modello di prova
“uno” o “due” o “tre”
Finora ho provato:
QRegExp rx("\\0042.*\\0042"); QRegExp rx("(\\0042).*?\\1");
L’ultimo modello ha successo su regexpal.com ma non con la class QRegExp.
EDIT: se si controlla l’ esempio di evidenziatore della syntax , questo è già presente.
http://qt-project.org/doc/qt-4.8/richtext-syntaxhighlighter-highlighter-cpp.html
quotationFormat.setForeground(Qt::darkGreen); rule.pattern = QRegExp("\".*\""); rule.format = quotationFormat; highlightingRules.append(rule);
Basta copiare la maggior parte del codice dall’esempio di evidenziatore di Qt e si dovrebbe essere impostato.
Nella descrizione della variazione di Qt su RegEx, si dice:
Nota: i quantificatori sono normalmente “golosi”. Corrispondono sempre a più testo ansible. Ad esempio, 0+ corrisponde al primo zero rilevato e a tutti gli zeri consecutivi dopo il primo zero. Applicato a “20005”, corrisponde a “20005”. I quantificatori possono essere resi non-golosi, vedi setMinimal ().
Se si utilizza setMinimal(true)
per ottenere l’effetto della corrispondenza lazy invece della corrispondenza avida, è ansible rimuoverlo. Altri valutatori di espressioni regolari usano qualcosa come *?
o +?
per eseguire una partita pigra. A volte uso il motore regex di gskinner per testare le mie espressioni.
Di seguito è il codice che stai cercando. È basato pesantemente sull’esempio dato qui .
#include #include #include #include int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QString str = "\"one\" or \"two\" or \"three\""; QRegExp rx("\".*\""); rx.setMinimal(true); int count = 0; int pos = 0; while ((pos = rx.indexIn(str, pos)) != -1) { ++count; pos += rx.matchedLength(); qDebug() << rx.cap(); } return a.exec(); }
Spero che sia d'aiuto.