2013-10-14 2 views
2

Je travaille sur un programme de terminal pour exécuter des applications sur des machines distantes. vous pouvez passer une commande comme dans la fenêtre cmd.exe comme:RegExp pour trouver des arguments de ligne de commande

"C:\random Directory\datApplication.py" "validate" -r /c "C:\anotherDirectory" 

pour que cela soit possible, je dois traiter avec le texte cité et analyser la commande et ses arguments de cette chaîne. dans le bloc-notes ++ j'ai trouvé un RegExp pour les patcher (([^" \t\n]+)|("[^"]*"))+ et cela fonctionne. en Qt4.8.1 j'ai essayé:

static const QRegExp re("(([^\" \\t\\n]+)|(\"[^\"]*\"))+"); 
re.matchExact(str); // str is something like shown above 
qDebug() << re.capturedTexts(); 

et ce code ne me imprimé est 3 fois le "C:\random Directory\datApplication.py" et rien de plus. il devrait imprimer chaque argument entré comme un seul objet ...

que puis-je faire pour le faire fonctionner?

SOLUTION: (grâce à Lindrian)

const QString testText = "\"C:\\random Directory\\datApplication.py\" \"validate\" -r /c \"C:\\anotherDirectory\""; 
static const QRegExp re("([^\" \\t\\n]+|\"[^\"]*\")+"); 
int pos = 0; 
while ((pos = re.indexIn(testText)) != -1) //-i indicates that nothing is found 
{ 
    const int len = re.matchedLength(); 
    qDebug() << testText.mid(pos,len); 
    pos += len; 
} 

Répondre

3

TPTA: ([^" \t\n]+|"[^"]*")

(Vous venez de backrefs L'utilisation excessive)

Assurez-vous de capturer tous les résultats.

Démo: http://regex101.com/r/pR8oF5

+0

merci pour votre réponse rapide. Il a fallu aussi changer le code qt pour «trouver» les correspondances correctes. super lien btw, aide à comprendre beaucoup (et comme un débutant sanglant à regexp je peux l'utiliser);) – Zaiborg

Questions connexes