Ankündigung

Einklappen
Keine Ankündigung bisher.

Überlange Wörter in MySQL-Datenbank finden

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Überlange Wörter in MySQL-Datenbank finden

    Wie im Betreff geschrieben geht es mir tatsächlich nur darum in einer kompletten MySQL-Datenbank oder in einer einzelnen Tabelle, jedoch in allen Feldern, nach Datensätzen zu suchen, und diese möglichst per SELECT im PhpMyAdmin oder eben per PHP im Browser auszugeben, welche ein Wort mit mehr als (beispielsweise) 40 Zeichen enthalten. Diese würde ich dann händisch anpassen, trennen oder umformulieren. Es geht mir also nicht um die bestehenden Lösungen diese Wörter direkt mittels wordwrap oder regexp zu bearbeiten und automatisiert zu trennen!


  • #2
    Auf die Schnelle ... du kannst auch direkt per SQL nach RegEx Ausdrücken suchen: http://dev.mysql.com/doc/refman/5.5/en/regexp.html

    LG
    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
    PHP.de Wissenssammlung | Kein Support per PN

    Kommentar


    • #3
      In allen Feldern nach überlangen Wörtern zu suchen macht nicht unbedingt Sinn. Lass dir per SQL nur die Felder einer Tabelle liefern, welche vom Typ auch diese Wörter enthalten können. Daraus kannst du dir eine Abfrage zusammenbauen, wobei der Tipp von hausl ganz nützlich ist.
      PHP-Klassen auf github

      Kommentar


      • #4
        Das stimmt. Es ist nicht notwendig alle Felder der Tabelle nach Wortlänge zu untersuchen.
        Ich habe folgenden RegEx Ausdruck gefunden:
        PHP-Code:
        mysqlSELECT FROM tier WHERE name REGEXP "^.{50}$"
        Damit kann man aber nur ganze Feldinhalte mit einer Länge von 50 Zeichen finden. Ich bräuchte die Funktion aber für einzelne Wörter.
        Gibt es innerhalb eines RegEx Ausdrucks eine Möglichkeit den String bei den Leerzeichen zu splitten um eben aus Sätzen einzelne Wörter zu machen (sowie mit PHP explode)?
        Ich hätte es eben gerne direkt innerhalb einer MySQL-Abfrage ohne zusätzlichem PHP-Code!

        Kommentar


        • #5
          Ich habe jetzt zig Thread zu diesem Thema gelesen.
          Mittlerweile funktioniert folgendes:
          PHP-Code:
          $anzahl "5";

          $text "Satz mit einem langen Wooooooooooooooooooooooooooooooooort";
          $text2 explode(" "$text);
              echo 
          "W&ouml;rter mit " $anzahl " Buchstaben:<br><br>";
              
          $pattern "/^.{5}\$/";
              foreach (
          $text2 as $value) { 
              if(
          preg_match($pattern$value)){
                  echo 
          $value "<br>";
              }

          Das ergibt die Ausgabe:
          Wörter mit 5 Buchstaben:

          einem

          Die folgende Erweiterung funktioniert leider nicht:
          PHP-Code:
          $anzahl "5";

          $text "Satz mit einem langen Wooooooooooooooooooooooooooooooooort";
          $text2 explode(" "$text);
              echo 
          "W&ouml;rter mit " $anzahl " Buchstaben:<br><br>";
              
          $pattern "/^.{'.$anzahl.'}\$/";
              foreach (
          $text2 as $value) { 
              if(
          preg_match($pattern$value)){
                  echo 
          $value "<br>";
              }

          Hier wird "einem" nicht angezeigt. Setze ich die Variable $anzahl im RegEx von der Variable $pattern nicht korrekt ein?

          Das funktioniert übrigens auch nicht:
          PHP-Code:
          $anzahl 5

          Kommentar


          • #6
            Den Sinn der Aufgabe mal nicht hinterfragt, sondern:

            Wenn du eh schon alle Wörter in PHP hast, wieso nicht gleich mit mb_strlen() die Länge der Zeichenkette prüfen? Regex ist für das ganz klar over-engineered.
            GitHub.com - ChrisAndChris - RowMapper und QueryBuilder für MySQL-Datenbanken

            Kommentar


            • #7
              Zitat von Overtone Beitrag anzeigen
              ... geht es mir tatsächlich nur darum in einer kompletten MySQL-Datenbank oder in einer einzelnen Tabelle, jedoch in allen Feldern, nach Datensätzen zu suchen, ... welche ein Wort mit mehr als (beispielsweise) 40 Zeichen enthalten. Diese würde ich dann händisch anpassen, trennen oder umformulieren. ...

              Klingt für mich nach so einer Einmal-Bereinigung?!
              Suche mal für "mysql-regex" mal nach Boundaries, das sind Wortgrenzen, ev. kann das MySql auch. In "PHP-PCRE" kann man so nach Wörtern suchen, hier ein Beispiel im Wörtern länger als 10 Zeichen.

              Code:
              #\b[\wäüöß]{10,}\b#giu
              https://regex101.com/r/nH0vE9/2

              LG
              Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
              PHP.de Wissenssammlung | Kein Support per PN

              Kommentar


              • #8
                Grenzt man "Wort" auf einen zusammenhängenden String ohne Leerzeichen ein geht's doch ganz easy:
                Code:
                SELECT * FROM `table` WHERE `field` REGEXP "[^ ]{40,}"
                Wahlweise noch ergänzt um Satzzeichen, wobei ich ja der Meinung bin, dass nach einem Satzzeichen auch ein Leerzeichen folgen sollte.
                VokeIT GmbH & Co. KG - VokeIT-oss @ github

                Kommentar


                • #9
                  Yes, das ist die Lösung. Funktioniert einwandfrei!!!

                  Kommentar


                  • #10
                    dass nach einem Satzzeichen auch ein Leerzeichen folgen sollte.
                    KISS
                    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                    PHP.de Wissenssammlung | Kein Support per PN

                    Kommentar

                    Lädt...
                    X