在Regexp和MySQL LIKE之间转换

时间:2013-07-12 12:20:21

标签: php mysql sql-like

我想接受PHP的preg_match和MySQL的LIKE运算符都可以使用的格式的条件。

这样做的原因是条件用于代码的两个不同部分,一个用于将条件与数据匹配要快得多,另一个用于将数据与条件匹配的速度明显更快。 / p>

我想为用户提供类似的功能:

'hostname' 'match' '*.core-*-??.foo.com'

对于MySQL,它将使用:

'%.core-%-__.foo.com'

对于preg_match,它会使用类似的东西:

'/.*\.core-.*-..\.foo\.com$/'

我确信有人已经想出了一些允许在这两个系统之间进行便携式匹配的方法。

另一种方法是在MySQL中使用正则表达式,但从可伸缩性的角度来看,我不确定这是一个多么好的想法。

1 个答案:

答案 0 :(得分:2)

尝试使用preg_escape

$str_php_input = str_replace("\\*", ".*", preg_escape($str_input));

$str_mysql_input = str_replace("*", "%", $str_input);

很好地掌握应该使用\进行转义的内容以及不应该使用的内容,并且您可以很好地使用它。