正则表达式中的歧义问题以及Laravel 5.1的预备语句占位符

时间:2017-05-23 14:49:19

标签: mysql regex laravel prepared-statement

在Laravel 5.1中工作 我需要获取此查询的数据:

3E

我无法将我的绑定参数放到适当的位置,这应该是这样的:

$query = "top";
$data['rawQuery'] = "category_names REGEXP '(?<![a-zA-Z])".'{?}'.'((es)?|(s?))(?![a-zA-Z])';
 $data['bindParams'] =  [$query];
 $result = DB::table($this->table)
                    ->whereRaw($where['rawQuery'], isset($where['bindParams']) ? $where['bindParams'] : array())
                    ->select($selectedColumns)
                    ->get();

然而我得到了这个:

 select * from product_categories where category_names REGEXP '(?<![a-zA-Z])top((es)?|(s?))(?![a-zA-Z])

不同之处在于,我的查询值设置为错误的位置。 请详细说明。

1 个答案:

答案 0 :(得分:0)

您正在尝试匹配可选择以ses结尾的字词。虽然这没有考虑到其他可能的结局,但您可能正在寻找一个完整的单词选项,即单词边界。在MySQL中,您需要使用[[:<:]][[:>:]]。请注意,可以通过具有备选方案的分组构造来定义可选结尾 - (es|s|)

$data['rawQuery'] = "category_names REGEXP '[[:<:]]".'{?}'.'(es|s|)[[:>:]]';