In Strings nach regulären Ausdrücken suchen



  • Hi(gh)!

    Gibt es eine Funktion in <regex>, die nicht true oder false, sondern die Position des ersten Vorkommens eines regulären Ausdrucks zurückgibt?

    Bis bald im Khyberspace!

    Yadgar



  • Ja.



  • @Swordfish sagte in In Strings nach regulären Ausdrücken suchen:

    Ja.

    Diese Antwort ist korrekt in dem Sinne, dass sie die gestellte Frage beantwortet, aber dennoch vermutlich wenig hilfreich 😉

    @Yadgar Schau dir mal den m-Paramater z.B. von std::regex_search an. Den hast du vielleicht in diesem ganzen Template-Rauschen übersehen, aber dort wird das Ergebnis der Regex-Suche abgelegt. m[i].first und m[i].second liefern die Start- und Endposition des i-ten gematchten Teilstrings. Für nur das erste Vorkommen kannst du auch m.prefix().second verwenden.

    Bedenke, dass es sich bei diesen Werten nicht um String-Indizes, sondern um Iteratoren handelt. Falls du Indizes brauchst, solltest du dir mal std::distance ansehen.



  • @Finnegan sagte in In Strings nach regulären Ausdrücken suchen:

    Diese Antwort ist korrekt in dem Sinne, dass sie die gestellte Frage beantwortet, aber dennoch vermutlich wenig hilfreich

    Es soll endlich lernen Google zu benutzen verdammte Axt.



  • @Swordfish sagte in In Strings nach regulären Ausdrücken suchen:

    Es soll endlich lernen Google zu benutzen verdammte Axt.

    Da scheint's ne Vorgeschichte zu geben, die mir nicht bewusst war. Aber ja, die Informationen kann und sollte man sich aus verfügbarer Dokumentation heraussuchen können (wie die von mir verlinkte), sonst wird man auf Dauer nicht weit kommen. Ich kann aber verstehen, wenn z.B. cppreference etwas überfordernd ist und es da Rückfragen gibt. Das Ding ist stellenweise wie der C++-Standard geschrieben - nützlich für Fortgeschrittene, aber keine leicht verdauliche Anfänger-Doku.



  • @Finnegan sagte in In Strings nach regulären Ausdrücken suchen:

    Anfänger

    Erster eruierbarer Beitrag hier im Forum ist vom 4. Sept. 2012, 23:41 ...



  • Hi(gh)!

    @Swordfish

    Ja, aber Programmieren ist eine Sache, wo man tagtäglich dranbleiben muss - ansonsten bleibt man ein Leben lang Anfänger! Leider ist Programmieren nicht mein einziges Hobby, sonst hätte ich wahrscheinlich mittlerweile mehr Durchblick...

    Bis bald im Khyberspace!

    Yadgar



  • https://www.google.com/search?q=position+match+regex+c%2B%2B

    zweites Ergebnis: https://stackoverflow.com/questions/27927913/find-index-of-first-match-using-c-regex

    ansonsten bleibt man ein Leben lang Anfänger!

    Quatsch mit Soße. Ohne Eigeninitiative bleibt man ein Leben lang Anfänger.



  • @Finnegan
    Nein, das ist zu kompliziert für mich, da macht mein Gehirn die Grätsche! Gibt es keine einfachere Sprache als C++, um Inhalte aus HTML-Codetexten zu extrahieren?



  • Hi(gh)!

    Da ich offensichtlich zu dumm bin, um die Implementation regulärer Ausdrücke in <regex> zu verstehen, hier meine Lösung für Dumme (bzw. C++-Traditionalisten, die mit diesem neumodernen ECMAScript-Zoix nix am Hut haben):

      unsigned int pw[10]; // Array für Suchergebnisse für die Ziffern 0 bis 9
      unsigned short int i;
      unsigned int pos;
      
      occ = source.find("itemprop=\"locality\">");
      for (i=0; i<10; i++)
      {
        pw[i] = source.find((char)48+i, occ);
        if (i == 0)
          pos = pw[i];
        else
          if (pw[i] < pos)
            pos = pw[i];
      }
      for (i=0; i<10; i++) // Testausgabe
        cout << pw[i] << endl;
      
      cout << "Erstes Vorkommen einer Zahl ab Stelle " << occ << ": " << pos << endl; // Testausgabe


  • @Yadgar sagte in In Strings nach regulären Ausdrücken suchen:

    @Finnegan
    Nein, das ist zu kompliziert für mich, da macht mein Gehirn die Grätsche! Gibt es keine einfachere Sprache als C++, um Inhalte aus HTML-Codetexten zu extrahieren?

    Als ich das letzte mal so etwas benötigt habe, habe ich das mit dem Kommandozeilen-Tool Xidel gemacht und die Abfrage in XQuery geschrieben, um die (unstrukturierten) Daten in mehreren HTML-Dokumenten in (strukturierte) JSON-Daten zu transformieren.

    Ich fand, dass man damit recht gut selbst komplexe HTML-Dokumente handhaben kann - allerdings muss man sich da auch erstmal etwas einarbeiten. Vielleicht ist das ja auch eine Lösung für dein Problem. C++ wäre für sowas jedenfalls nicht meine erste Wahl - besonders bei Problemen, bei denen man garantiert nicht der erste ist, der das hat, schaue ich mir erstmal an, ob vorhandene Lösungen ausreichend sind.



  • Hi(gh)!

    @Finnegan
    Na ja, mittlerweile komme ich ja schon wieder gut voran, auch ohne <regex> - aber es ist natürlich C++ wie vor 25 Jahren (das war auch die Zeit, als ich meinen ersten Volkshochschul-C++-Kurs hatte und damals Feuer und Flamme für die Sprache war...)...

    Bis bald im Khyberspace!

    Yadgar



  • Vielleicht erzählst Du mal zur Abwechslung was Du konkret erreichen willst anstatt wild rumzuschießen. HTML kannst Du mit regex sowieso nicht parsen.



  • @Yadgar sagte in In Strings nach regulären Ausdrücken suchen:

    pw[i] = source.find((char)48+i, occ);
    

    Unabhängig vom Thema: Wenn Du '0' meinst, dann schreib '0' hin.



  • Hi(gh)!

    @Swordfish sagte in In Strings nach regulären Ausdrücken suchen:

    Vielleicht erzählst Du mal zur Abwechslung was Du konkret erreichen willst anstatt wild rumzuschießen. HTML kannst Du mit regex sowieso nicht parsen.

    Also: Mein Programm "oac" (Organ Ad Compressor) soll auf Festplatte gespeicherte eBay-Kleinanzeigen elektronischer Orgeln auf ihre essentielle Information reduzieren: Anzeigentext, Benutzername, Anzeigendatum, Ort und Preis und diese Informationen in ein rudimentäres HTML-Gerüst, gerade umfangreich genug, um als fehlerfreier HTML-Code angezeigt zu werden, einfügen; ferner sollen auch alle großformatigen Fotos des angebotenen Artikels eingebunden werden (im Original zu erkennen am Dateinamen "72_[kein Zeichen oder dreistellige laufende Nummer mit führenden Nullen].JPG"). Außerdem sollen die reduzierten HTML-Dateien mitsamt ihren Bilddateien in Ordner geschrieben werden, die fortlaufend nach dem Schema "YYYYMMDD_%03d" benannt sind, dies soll ebenfalls der Name der jeweiligen HTML-Datei sein.

    Warum ich das mache? Es handelt sich um mehrere zehntausend Dateien, die mit all dem Overhead, der heutzutage mit kommerziellen HTML-Dateien einhergeht, rund 300 GB auf meiner Festplatte einnehmen. Nach einer solchen Reduktion auf die Kerninformation werden es voraussichtich noch 6 GB sein... die Dummenlösung wäre, jetzt einfach noch eine externe Festplatte zu kaufen (prollerolleroll) - aber dafür fehlt mir das Geld.

    Die Kerninformationen der Anzeigen (darunter selbstverständlich auch das entweder aus dem Anzeigentext oder den Fotos ersichtliche Orgelmodell) will ich im Rahmen meiner GREENBOOK-E-Orgel-Datenbank in eine Marktspiegel-Statistik einpflegen - dies dann natürlich manuell.

    Bis bald im Khyberspace!

    Yadgar


Anmelden zum Antworten