Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何选择列在括号中有两个字符的行?_Mysql_Regex_Select - Fatal编程技术网

Mysql 如何选择列在括号中有两个字符的行?

Mysql 如何选择列在括号中有两个字符的行?,mysql,regex,select,Mysql,Regex,Select,这不管用。它返回了许多行,这些行的c中包含的字符串在()中超过两个字符。您的转义已关闭 由于MySQL在字符串中使用C转义语法(例如,“\n”表示换行符),因此必须将REGEXP字符串中使用的任何“\”加倍 使用: 您如何运行此查询?如果您在(比如)PHP脚本中使用它,并按照以下方式编写: SELECT * FROM t WHERE c REGEXP '.*\\(..\\).*'; 然后PHP解释器将实际剥离这些反斜杠,生成真正的查询 $sql = "SELECT ... REGEXP '.

这不管用。它返回了许多行,这些行的
c
中包含的字符串在
()
中超过两个字符。您的转义已关闭

由于MySQL在字符串中使用C转义语法(例如,“\n”表示换行符),因此必须将REGEXP字符串中使用的任何“\”加倍

使用:


您如何运行此查询?如果您在(比如)PHP脚本中使用它,并按照以下方式编写:

SELECT * FROM t WHERE c REGEXP '.*\\(..\\).*';
然后PHP解释器将实际剥离这些反斜杠,生成真正的查询

$sql = "SELECT ... REGEXP '.*\(..\).*';";
这将是任何至少有两个字符的记录。要使其正常工作,您必须加倍逃逸:

... REGEXP '.*(..).*';
PHP将从每个集合中去掉一个反斜杠,剩下的第二个将实际到达mysql

$sql = "SELECT ... REGEXP '.*\\(..\\).*';";

SQL FIDLE

是MySQL解析器本身去除了这些斜杠,而不是PHP。尝试
echo'\(asdf\)斜杠仍然存在这只适用于
()
之间的拉丁字符如果我需要查找
()
中的两个字符是非拉丁字符的情况,例如中文字符,该怎么办?不确定是否可以这样做。警告:REGEXP和RLIKE运算符以字节方式工作,因此它们不是多字节安全的,可能会对多字节字符集产生意外的结果。此外,这些运算符按字节值比较字符,即使给定的排序规则将其视为相等,重音字符也可能不相等如果可以的话,请使用
,比如
,看@Fred的答案。它忽略了两个汉字之间的情况
(),
。它实际上是有效的,但只适用于英文括号,而中文括号呢
(uuu)
比如
可能无法正确处理括号之间的一个或两个多字节字符,但是多字节圆括号字符本身(U+FF08和U+FF09)应该没有问题,因为它们是以LIKE模式中的文字值提供的。您的意思是使用
SELECT*FROM t,其中类似于“%”(uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu)%”的c应该可以工作吗?既不是
'%\xff\x08\uuuuuuuuxff\x09%'
。我在我的应用程序中进行了测试。我不太会使用MySQL,所以我不确定您需要如何转义SQL语句中的多字节字符。
$sql = "SELECT ... REGEXP '.*\\(..\\).*';";
SELECT * FROM t WHERE c LIKE '%(__)%'