QRegExp e testo con doppi apici per QSyntaxHighlighter

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.

Greedy v. Lazy Match in QRegEx

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.