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
-
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
LGThe string "()()" is not palindrom but the String "())(" is.
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
-
Das stimmt. Es ist nicht notwendig alle Felder der Tabelle nach Wortlänge zu untersuchen.
Ich habe folgenden RegEx Ausdruck gefunden:
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:
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:
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.[URL="https://github.com/chrisandchris"]GitHub.com - ChrisAndChris[/URL] - [URL="https://github.com/chrisandchris/symfony-rowmapper"]RowMapper und QueryBuilder für MySQL-Datenbanken[/URL]
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.
Code:#\b[\wäüöß]{10,}\b#giu
LGThe string "()()" is not palindrom but the String "())(" is.
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
-
Grenzt man "Wort" auf einen zusammenhängenden String ohne Leerzeichen ein geht's doch ganz easy:
Code:SELECT * FROM `table` WHERE `field` REGEXP "[^ ]{40,}"
Kommentar
-
The string "()()" is not palindrom but the String "())(" is.
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
Kommentar