Liomans Blog - Regexhttps://lioman.de/42 ist die Antwort – aber wie lautet die Frage?Sun, 04 Jan 2015 18:36:00 +0100MySQL: Einträge mit regulären Ausdrücken löschenhttps://lioman.de/2015/01/mysql-eintrage-mit-regularen-ausdrucken-loschen/<p>Arbeitet man mit Datenbanken, speziell im Entwicklungsstadium einer Anwendung, kann allerlei Müll anfallen, den man tunlichst loswerden möchte. Geht es um einzelne Einträge, kann man das gut mit Befehlen&nbsp;wie:</p> <pre class="code sql literal-block"> <span class="k">DELETE</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">tabellenname</span><span class="w"> </span><span class="k">WHERE</span><span class="w"> </span><span class="n">id</span><span class="o">=</span><span class="n">xy</span> </pre> <p>wenn man nur wenige oder gar einen einzelnen Eintrag loswerden möchte.&nbsp;Und</p> <pre class="code mysql literal-block"> <span class="k">DELETE</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">tabellenname</span><span class="w"> </span><span class="k">WHERE</span><span class="w"> </span><span class="n">spaltenname</span><span class="o">=</span><span class="s2">&quot;&quot;</span> </pre> <p>würde alle leeren Testeinträge&nbsp;verwerfen.</p> <p>Hat man jedoch&nbsp;viele Reihen, die unerwünscht sind, kann es schnell eine abendfüllende Aufgabe werden alles Unbenötigte loszuwerden. Und leider sind nicht immer alle Testeinträge an der richtigen Stelle leer. Schon ein Zeilenumbruch (&#8220;<em>\n</em>&#8221;) in einem Textfeld reicht das zweite Statement zu&nbsp;vereiteln.</p> <p>Besser geeignet sind für solche Vorhaben sind <a class="reference external" href="https://de.wikipedia.org/wiki/Regul%C3%A4rer_Ausdruck">Reguläre Ausdrücke</a>, so muss man nicht von Hand zusammensuchen oder löschen. Dazu muss man einfach in die <em><span class="caps">WHERE</span></em>-Klausel in folgender Weise&nbsp;modifizieren:</p> <pre class="code mysql literal-block"> <span class="k">DELETE</span><span class="w">&nbsp;</span><span class="k">FROM</span><span class="w">&nbsp;</span><span class="n">tabellenname&nbsp;WHERE&nbsp;spaltenname</span><span class="w"> </span><span class="k">Regexp</span><span class="w"> </span><span class="s1">'^[ ]*[</span><span class="se">\n</span><span class="s1">]+[ ]*$'</span><span class="p">;</span> </pre> <p>In diesem Fall werden alle Zeilen gelöscht, die nur aus leeren Zeichen und ein oder mehreren Zeilenumbrüchen bestehen. Das funktioniert natürlich analog auch mit <span class="caps">SELECT</span>.&nbsp;*</p> LiomanSun, 04 Jan 2015 18:36:00 +0100tag:lioman.de,2015-01-04:/2015/01/mysql-eintrage-mit-regularen-ausdrucken-loschen/DigitalOpen SourcedatenbankmysqlRegexsqlpageLogger Boterkennung verbessernhttps://lioman.de/2009/11/pagelogger-boterkennung-verbessern/<p><strong>Ich habe schon über die Statistiksoftware pageLogger berichtet und bin auch bisher damit zufrieden. Allerdings stellte ich fest, dass die Bot-Erkennungsliste etwas mager&nbsp;ist.</strong></p> <p>Im Verzeichnis <span class="caps">PAGELOGGER</span>/includes/robots liegt die Datei robots.txt. Sie ist gefüllt mit RegEx - also kleinen Textschnipseln die in einem <a class="reference external" href="http://de.wikipedia.org/wiki/User%20Agent">User Agent</a> auftauchen können - und einer Erklärung die dann im Frontend&nbsp;auftaucht.</p> <p>Bsp:</p> <pre class="literal-block"> gaisbot/#Gaisbot geckobot#GeckoBot gencrawler#GenDoor gigabaz/#GigaBaz gigabot#GigaBot googlebot#Googlebot griffon#navi.ocn.ne.jp </pre> <p>Doch 271 Bots sind etwas wenig sind doch mehrere Tausende inzwischen bekannt. Es sind zwar nicht alle wichtig und einige kommen sicher sehr selten auf einem kleinen Blog vorbei. trotzdem ist es sinnvoll die Liste ein wenig zu&nbsp;erweitern.</p> <p>Ich habe mir verschiedene Listen im Netz angeschaut und sie dann mit ein paar Konsolenbefehlen zusammengefügt. Dann noch eine kleine Reinigung der Liste von Hand und nun werden ganze 871 <a class="reference external" href="http://de.wikipedia.org/wiki/Webcrawler">Spider</a>&nbsp;unterstützt.</p> <p>Wer sie möchte kann sie <tt class="docutils literal">hier</tt> herunterladen und in sein pageLoggerinstallation&nbsp;einfügen.</p> <p><span class="caps">PS</span>: Bei mir ging dies nicht über pageLogger direkt. Ich habe die Datei per <a class="reference external" href="http://de.wikipedia.org/wiki/File%20Transfer%20Protocol"><span class="caps">FTP</span></a>&nbsp;hochgeladen.</p> LiomanTue, 24 Nov 2009 14:04:00 +0100tag:lioman.de,2009-11-24:/2009/11/pagelogger-boterkennung-verbessern/DigitalBotsCrawlerDownloadPageLoggerRegexrobotsStatistik