在mysql REGEXP查询中转义单引号

jgwigjjp  于 2023-08-02  发布在  Mysql
关注(0)|答案(3)|浏览(149)

我试着在mysql中使用正则表达式,它工作得很好,除了当我在我的单词中使用引号。
举例来说:

SELECT * FROM table WHERE REGEXP "^pagina's[^[:space:]]*$"

字符串
我尝试了以下所有方法:

SELECT * FROM table WHERE REGEXP "^'.preg_quote("pagina's").'[^[:space:]]*$"


和/或

SELECT * FROM table WHERE REGEXP "^'.addslashes("pagina's").'[^[:space:]]*$"


和/或

SELECT * FROM table WHERE REGEXP "^'.mysql_escape_real_string("pagina's").'[^[:space:]]*$"


没有运气..
它不会给予我任何结果,因为单词“pagina's”中的单引号(')。
我怎样才能转义所有的引号,这样mysql就可以看到引号的字面量并匹配数据库中的字段?

编辑

这是我的PHP代码:

$word = "pagina's";
$ary[] = "LOWER(idx.sidx_word) REGEXP '^".preg_quote($word)."[^[:space:]]*$'";

xxe27gdn

xxe27gdn1#

您需要指定表和列名。。而且你没有正确地转义引号。试试这样的方法:

SELECT *
FROM table
WHERE column REGEXP '^pagina''s[^[:space:]]*$';

字符串

q7solyqu

q7solyqu2#

您必须为regexp指定一个列名,并使用斜杠对引号进行转义:

SELECT *
FROM table
WHERE column REGEXP '^pagina\'s[^[:space:]]*$';

字符串

vsdwdz23

vsdwdz233#

您可以交替使用单引号/双引号来匹配双引号/单引号。要匹配任何字符,请将要匹配的字符括在“[]”中。当特殊字符(例如。“[","]",“\”),在“[]”括号内加一个反斜杠作为前缀。
要解决在REGEXP匹配中同时使用单引号和双引号或匹配任何字符的问题,请根据需要使用CONCAT()和CHAR()构造正则表达式。请看下面的例子:

/* create test string (\377 is octal): abc'\377"de\\f[x]  */
SET @tststr := CONCAT("abc'",char(255),'"de\\f[x]' ); 
SELECT @tststr;  /*show the test string */

SELECT @tststr REGEXP "'" ; /* match single quote */
SELECT @tststr REGEXP '"' ; /* match double quote */
SELECT @tststr REGEXP char(255) ; /* match \xfe char */
SELECT @tststr REGEXP '\\' ; /*  FAIL: match backslash: this one fails  */
SELECT @tststr REGEXP '[\\]' ; /* OK: match backslash */

SELECT @tststr REGEXP 'f[\[]x[\]]$' ; /* OK: match ending sequence */ 
SELECT @tststr REGEXP 'f[[]x[]]$' ;   /* OK: oddly, this works too (unbalanced brackets)  */ 

/* Match entire sequence. Some characters may not need "[]" enclosing.
 * CONCAT() may be needed to construct the complex regular expressions. 
 */ 
SELECT @tststr REGEXP CONCAT("^abc'",char(255),'"de[\\]f[[]x[]]$' ) ; 
SELECT @tststr REGEXP CONCAT("^abc'[",char(255),']"de[\\]f[[]x[]]$' ) ; /* OK: This works too */

字符串

相关问题