Reguläre Ausdrücke mit Qt



  • Tagchen,
    ich bastle an einer Klasse, die die namen von OTR-Filmdateien zerlegt und mir die Einzelbestandteile zurueckgibt. Ich arbeite mich momentan erst in C++/Qt ein, die ersten kleineren Sachen laufen schon.

    Ich stelle den Post einfach mal ins GUI-Forum, ich moechte naemlich die Qt-Funktionen nutzen. Momentan hab ich die 4.3.2 auf dem Rechner (Debian SID)

    Die Filmdateien folgen folgendem Schema:

    {Titel, leerzeichen=_}_{Datum, jahr.monat.tag jeweils zweistellig}_{Uhrzeit der Aufnahme, Stunde-Minute im 24h-Format}_{Sendername, kleinbuchstaben und Zahlen}_{Dauer der Sendung, minuten}_{feste Zeichenkette, TVOON_DE}_{Format, "mpg.avi" | "mpg.HQ.avi" | "mp4"}.otrkey
    

    ich habe mir mithilfe von KRegexpEditor einen recht umfangreichen Ausdruck zusammengebaut:

    [a-zA-Z0-9_]*_(Top_Tipp_)?[0-9]{2}.[0-9]{2}.[0-9]{2}_[0-2][0-9]-[0-5][0-9]_[a-z0-9]*_[0-9]{1,3}_TVOON_DE\.(mp4|mpg\.(HQ\.)?avi)?\.otrkey
    

    Dieser erkennt in kregexpeditor saemtliche Dateinamen die ich ihm zu fressen gebe, sollte also recht zuverlaessig funktionieren. Eine Besonderheit im Titel ist, dass da nach dem eigentlichen Filmtitel noch ein "Top_Tipp" kommen kann.

    ich plane nun folgendes:
    Eine Klasse, die per Konstruktor den Dateinamen uebergeben bekommt.
    Diese zerlegt diesen String mittels regulaerer Ausdruecke in seine Bestandteile, also

    1. Titel, QString
    2. ob es ein TopTipp is, bool
    3. Datum, QDate
    4. Uhrzeit, QTime
    5. Sender, QString
    6. Dauer, int
    7. Format, int (also eine Konstante)

    Von PHP her weiss ich, dass man mittels eines regulaeren Ausdrucks bestimmte Teile eines Strings an eine Funktion uebergeben kann.
    Hier am Beispiel des phpBB3 BBcodeParsers:

    'quote'=> array('bbcode_id' => 0,'regexp' => array('#[quote(?:="(.*?)")?](.+)[/quote]#ise' => "\$this->bbcode_quote('\$0')")),
    

    parst man das mit der entsprechenden Funkion (welche weiss ich nicht bzw hab ich sie noch nicht gefunden) wird dabei die Funktion bbcode_parse_quote() aufgerufen, als Parameter bekommt die einmal den Namen (also bei [quote="name" ] das "name" als ersten und den inhalt der quote-tags als zweite.

    Okay, obs ein Top Tipp is und welches format es hat kann man ja mit den standard-funktionen rausfinden. aber wenn man den Dateinamen einfach durch ne Reihe methoden laufennlassen koennte, die jeweils die benoetigten Informationen ausgeben, waere ich schon viel weiter.
    hier mal ein paar Beispiele wie die Filmdateien heissen koennen (rand()-rausgegriffen aus dem pool 🙂 )

    Michael_Bay_s_Texas_Chainsaw_Massacre_07.10.14_23-10_pro7_120_TVOON_DE.mpg.HQ.avi.otrkey
    Rockpalast_Slipknot_07.10.15_04-50_ardeinsfestival_10_TVOON_DE.mpg.avi.otrkey
    Der_grosse_Diktator_Top_Tipp_07.10.14_20-47_arte_123_TVOON_DE.mpg.avi.otrkey
    Die_verlorene_Ehre_der_Katharina_Blum_Top_Tipp_07.10.15_00-15_ard_100_TVOON_DE.mp4.otrkey
    Last_Samurai_Top_Tipp_07.10.14_20-15_pro7_175_TVOON_DE.mp4.otrkey
    

    Hints? Links? Tipps?

    C167





  • oehm,...
    ja, irgendwie schon
    ich gestehe ich hab beim ersten Lesen nur die haelfte verstanden und hab auf den zweiten kein Beispiel fuer mein Problem gefunden. Mittels eines Wörterbuchs laesst sich das aber beheben. Als ich auf deinen Link geklickt hab, dachte ich erst es waere was anderes als das was ich dazu im qt assistant gefunden hab... ich vermute ich brauche die Funktion:
    QStringList QRegExp::capturedTexts ()
    vielen Dank 😉


Anmelden zum Antworten