MySQL Like值中的正则表达式

时间:2012-01-09 04:36:12

标签: php mysql regex

再次登记。

尝试运行类似SQL查询:

mysql_query("SELECT * From tablename WHERE somthing LIKE '%id|length:3:\"{$id}\"%'");

问题是长度值将是未知的,只有ID。

当然,我可以使用strlen($ id)并执行此操作:

$len = intval(strlen($id));
mysql_query("SELECT * From tablename WHERE somthing LIKE '%id|length:{$len}:\"{$id}\"%'");

但我真的不在乎检查len值,必须有一些Reg ex来匹配任何长度的东西,并在不必计算长度之前对其进行排序。

mysql_query("SELECT * From tablename WHERE somthing LIKE '%id|length:^*:\"{$id}\"%'");

想法?

1 个答案:

答案 0 :(得分:1)

@ Naddiseo的链接很好,我建议你使用REGEXP。 “没有确切的示例匹配”是什么意思?

尝试类似的东西(我在新行中添加了可读性):

mysql_query("SELECT * From tablename 
             WHERE somthing 
             REGEXP '^.*id\\\|length:[0-9]+:\"{$id}\".*$'");

相关的正则表达式无需担心转义MYSQL / php字符串

^.*id\|length:[0-9]+:"abc".*$

(假设abc是特定的$ {id})。

它说,“查找任何后跟文字字符串id|length:的内容(我已将其转义为|在正则表达式中具有特殊含义,您需要文字{ {1}}),后跟数字(|)作为ID的长度,后跟[0-9]+和其他任何内容(其中:"{$id}"已被替换)。

现在,如果您阅读@Naddiseo引用的MySQL regexp page,您会看到任何反斜杠都需要进一步转义,因为MySQL会将反斜杠解析为特殊字符。

因此,如果您要将此查询输入MySQL命令行(我们现在假设{$id}{$id}),则必须输入:

abc

现在,既然你是用双引号中的PHP调用它,你需要再次转义反斜杠 以确保正确的数字通过MySQL,以及反斜杠你的双引号来逃避他们。因此,在SELECT * From tablename WHERE somthing REGEXP '^.*id\\|length:[0-9]+:"abc".*$' 之前的mysql_query中有三个反斜杠。