gpt4 book ai didi

MySQL/Eloquent 贪婪的正则表达式

转载 作者:行者123 更新时间:2023-12-01 15:14:54 28 4
gpt4 key购买 nike

我正在尝试使用 Laravel 的 ORM Eloquent 查询 MySQL 表(我猜有点不相关)。我在表中有一个字段叫 quantitative ,其中包含格式为的 JSON[{name: 'a', value: 3}, {name: 'b', value: 4}] .

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

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}).*");
}),

使用正则表达式生成查询(如下) (?=.*a)(?=.*b).*
SELECT count(*) as aggregate from `table` where `quantitative` regexp ((?=.*a)(?=.*b)).* (...)

它产生以下错误:

SQLSTATE[42000]: Syntax error or access violation: 1139 Got error 'repetition-operator operand invalid' from regexp



当我在 regex101.com 上验证它时,Regex 本身工作得很好,我遇到的问题是它对 MySQL 语法无效。有没有办法让它工作或使用不同的正则表达式来完成任务?

最佳答案

似乎这些都可以工作:

LIKE '%a%b%'

REGEXP 'a.*b'

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

如果您试图在 JSON 字符串中查找内容,我建议您要么
  • 不要使用 JSON
  • 如果您的 MySQL 版本足够新,请使用 JSON 函数。

  • REGEXP 和 LIKE 太笨拙了。请注意 [{name: 'b', value: 4}]包含 a和一个 b .

    关于MySQL/Eloquent 贪婪的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60390625/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com