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!
Ankündigung
Einklappen
Keine Ankündigung bisher.
Überlange Wörter in MySQL-Datenbank finden
Einklappen
Neue Werbung 2019
Einklappen
X
-
Stichworte: -
-
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
-
Das stimmt. Es ist nicht notwendig alle Felder der Tabelle nach Wortlänge zu untersuchen.
Ich habe folgenden RegEx Ausdruck gefunden:
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.PHP-Code:mysql> SELECT * FROM tier WHERE name REGEXP "^.{50}$";
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
-
Ich habe jetzt zig Thread zu diesem Thema gelesen.
Mittlerweile funktioniert folgendes:
Das ergibt die Ausgabe:PHP-Code:$anzahl = "5";
$text = "Satz mit einem langen Wooooooooooooooooooooooooooooooooort";
$text2 = explode(" ", $text);
echo "Wörter mit " . $anzahl . " Buchstaben:<br><br>";
$pattern = "/^.{5}\$/";
foreach ($text2 as $value) {
if(preg_match($pattern, $value)){
echo $value . "<br>";
}
}
Wörter mit 5 Buchstaben:
einem
Die folgende Erweiterung funktioniert leider nicht:
Hier wird "einem" nicht angezeigt. Setze ich die Variable $anzahl im RegEx von der Variable $pattern nicht korrekt ein?PHP-Code:$anzahl = "5";
$text = "Satz mit einem langen Wooooooooooooooooooooooooooooooooort";
$text2 = explode(" ", $text);
echo "Wörter mit " . $anzahl . " Buchstaben:<br><br>";
$pattern = "/^.{'.$anzahl.'}\$/";
foreach ($text2 as $value) {
if(preg_match($pattern, $value)){
echo $value . "<br>";
}
}
Das funktioniert übrigens auch nicht:
PHP-Code:$anzahl = 5;
Kommentar
-
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.
Kommentar
-
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.
https://regex101.com/r/nH0vE9/2Code:#\b[\wäüöß]{10,}\b#giu
LG
Kommentar
-
Grenzt man "Wort" auf einen zusammenhängenden String ohne Leerzeichen ein geht's doch ganz easy:
Wahlweise noch ergänzt um Satzzeichen, wobei ich ja der Meinung bin, dass nach einem Satzzeichen auch ein Leerzeichen folgen sollte.Code:SELECT * FROM `table` WHERE `field` REGEXP "[^ ]{40,}"
Kommentar
-

Kommentar