如何在MYSQL中基于十六进制代码进行REGEXP搜索?
如何在MYSQL中基于十六进制代码进行REGEXP搜索?,mysql,regex,Mysql,Regex,从title REGEXP'[\x20]'所在的标记中选择title返回带有x、2或0的所有内容; 从标签中选择title,其中title REGEXP'\x20'以字面上的x20返回所有内容 我的实际使用案例是,我想搜索可能意外进入控制字符的任何标记。可能有更好的方法来实现这一点,但我想到的是: SELECT title FROM tags WHERE title REGEXP CONCAT('[',CHAR(1),'-',CHAR(31),']') 请注意,这些是十进制字符值,而不是十六进
从title REGEXP'[\x20]'所在的标记中选择title
返回带有x、2或0的所有内容;
从标签中选择title,其中title REGEXP'\x20'
以字面上的x20返回所有内容
我的实际使用案例是,我想搜索可能意外进入控制字符的任何标记。可能有更好的方法来实现这一点,但我想到的是:
SELECT title FROM tags WHERE title REGEXP CONCAT('[',CHAR(1),'-',CHAR(31),']')
请注意,这些是十进制字符值,而不是十六进制。我也无法找到一种方法让它同时查找空字节(\x00
)
下面是一个使用十六进制文字的替代方案:
SELECT title FROM tags WHERE title REGEXP CONCAT('[', x'01', '-', x'1F', ']')
我相信您可以在mysql shell中实现这一点,它可以自行删除反斜杠。以下几点对我很有用:
select id, data regexp '\\x1F\\x8B\\x08' from ...;
真的吗。我只想要“合法”的角色。我猜在顶部的图表中从00到1F,首先是的,它肯定在00爆炸。我甚至不明白你的答案是如何使用引号外的x和CONCAT的。你能解释一下它是如何实现这个答案的吗?如果MySQL支持的
\x
转义,这将构造字符串'[\x01-\x1F]'
。在正则表达式中,这将是一个字符类,它匹配字符代码介于1和1F(包括1和1F)之间的所有字符CONCAT
连接字符串,因此CONCAT('hello','world')
将是'helloworld'。您可以阅读有关十六进制文字的内容。请注意,您可以通过以下查询按十六进制代码搜索单个XML字符:从title REGEXP x'01'所在的标记中选择title