ascii nulls in regex's
"Wagner, Chris (GEAE, CBTS)" <[email protected]> Fri, 26 Oct 2007 17:13:09 -0400
| Newsgroups | gmane.comp.db.mysql.perl |
|---|---|
| Organization | GE Aircraft Engines \Cincinnati Bell |
| Message-ID | <[email protected]> |
Greetings all. I've run into something annoying that doesn't seem to be in the MySQL manual. I have fields of type varchar that contain null characters, chr(0). I need to find these for error reporting however MySQL seems to regard them as string terminators. A regex stops parsing on encountering the null. The fields should only contain DNS legal characters so I used a simple regex to find exceptions. However the nulls totally blow it up: mysql> SELECT "comprm1 " REGEXP "^[a-z0-9.-]+$"; +-----------------------------------+ | "comprm1 " REGEXP "^[a-z0-9.-]+$" | +-----------------------------------+ | 0 | +-----------------------------------+ 1 row in set (0.00 sec) mysql> SELECT "comprm1\0 " REGEXP "^[a-z0-9.-]+$"; +-------------------------------------+ | "comprm1\0 " REGEXP "^[a-z0-9.-]+$" | +-------------------------------------+ | 1 | +-------------------------------------+ 1 row in set (0.00 sec) They also don't fall under the [:cntrl:] class! mysql> SELECT "comprm1\0 " REGEXP "[[:cntrl:]]"; +-----------------------------------+ | "comprm1\0 " REGEXP "[[:cntrl:]]" | +-----------------------------------+ | 0 | +-----------------------------------+ 1 row in set (0.00 sec) I can use LIKE to find them but I'ld prefer to use a single concise regex. mysql> SELECT "comprm1\0 " LIKE "%\0%"; +--------------------------+ | "comprm1\0 " LIKE "%\0%" | +--------------------------+ | 1 | +--------------------------+ 1 row in set (0.00 sec) Any ideas? -- Chris Wagner CBTS GE Aircraft Engines [email protected] -- MySQL Perl Mailing List For list archives: http://lists.mysql.com/perl To unsubscribe: http://lists.mysql.com/[email protected]