首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL /雄辩贪婪的正则表达式

MySQL /雄辩贪婪的正则表达式
EN

Stack Overflow用户
提问于 2020-02-25 08:48:02
回答 1查看 214关注 0票数 4

我试图使用Laravel的ORM口才来查询一个MySQL表(我猜有点无关紧要)。表中有一个名为quantitative的字段,它包含格式为[{name: 'a', value: 3}, {name: 'b', value: 4}]的JSON。

我希望用户能够查询所有包含他以任何顺序指定的值的条目。

代码语言:javascript
复制
AllowedFilter::callback('quantitative', function (Builder $query, $value) {
    $quantitative = collect($value)->filter(function ($el) {
        return isset($el['value']);
    })->pluck('value')->map(function ($el) {
        return "(?=.*{$el})";
    })->implode('');

    $query->where('quantitative', 'regexp', "({$quantitative}).*");
}),

使用regex (?=.*a)(?=.*b).*生成查询的

代码语言:javascript
复制
SELECT count(*) as aggregate from `table` where `quantitative` regexp ((?=.*a)(?=.*b)).* (...)

它会产生以下错误:

SQLSTATE42000:语法错误或访问冲突:从regexp获得了“重复操作数无效”错误

Regex本身在regex101.com验证时运行良好,我遇到的问题是它对MySQL语法无效。是否有任何方法使其工作或使用不同的正则表达式来完成任务?

EN

回答 1

Stack Overflow用户

发布于 2020-02-25 23:27:36

似乎这两种方法都能奏效:

代码语言:javascript
复制
LIKE '%a%b%'

REGEXP 'a.*b'

请提供应该匹配的字符串的简短列表和不应该匹配的短列表。

如果您试图在JSON字符串中找到东西,我建议您选择

  • 不使用JSON
  • 使用JSON函数,如果您的MySQL版本足够新。

REGEXP和类似的东西太疯狂了。注意,[{name: 'b', value: 4}]包含一个a和一个b

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60390625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档