2012-04-24 5 views
6

SELECT title FROM tags WHERE title REGEXP '[\x20]' gibt alle Dinge mit x, 2 oder 0 zurück; SELECT title FROM tags WHERE title REGEXP '\x20' kehrt alles mit buchstäblich x20Wie suche ich REGEXP basierend auf Hex-Codes in MYSQL?

Mein tatsächlichen Anwendungsfall ist, dass ich für alle Tags gesucht werden soll, die versehentlich in Steuerzeichen erhalten hat.

+0

Welche Steuerzeichen? –

+0

Irgendwelche wirklich. Ich will nur "legitime" Charaktere drin haben. Ich vermute von 00 bis 1F in diesem Top-Diagramm, für einen Anfang http://www.columbia.edu/kermit/ascii.html –

Antwort

3

Es kann ein besserer Weg, dies zu tun, aber hier ist, was ich kam:

SELECT title FROM tags WHERE title REGEXP CONCAT('[',CHAR(1),'-',CHAR(31),']') 

Beachten Sie, dass dies Dezimalzeichen Werte sind, nicht hex. Ich konnte auch keinen Weg finden, NULL Bytes (\x00) zu finden.

Hier ist eine Alternative, die Hex-Literale verwendet:

SELECT title FROM tags WHERE title REGEXP CONCAT('[', x'01', '-', x'1F', ']') 
+0

Ja, es explodiert definitiv auf 00. Ich verstehe nicht einmal, wie Ihre Antwort funktioniert ein x außerhalb von Anführungszeichen und mit CONCAT. Kannst du erklären, was es tut, um diese Antwort zu erhalten? –

+1

Wenn MySQL '\ x' Escapes unterstützt, würde dies den String' '[\ x01- \ x1F]' 'konstruieren. In Regex wäre das eine Zeichenklasse, die allen Zeichen entspricht, bei denen der Zeichencode zwischen 1 und 1F (inklusive) liegt. 'CONCAT' verkettet Strings, also wäre' CONCAT ('Hallo', 'Welt') ''Helloworld'. Sie können über Hex-Literale [hier] lesen (http://dev.mysql.com/doc/refman/5.0/en/charset-literal.html). –

+0

Beachten Sie, dass Sie mit der folgenden Abfrage nach einem einzelnen XML-Zeichen mit Hex-Code suchen können: 'SELECT Titel FROM Tags WHERE Titel REGEXP x'01'' – rinogo

0

Ich glaube, Sie es in mysql-Shell, die Schrägstriche auf ihrem eigenen entfernt. Folgendes funktionierte für mich:

select id, data regexp '\\x1F\\x8B\\x08' from ...;