JsonQ高级扩展指南:whereMatch正则匹配与macro自定义查询逻辑,解锁PHP JSON查询的终极能力
JsonQ高级扩展指南whereMatch正则匹配与macro自定义查询逻辑解锁PHP JSON查询的终极能力【免费下载链接】jsonqA PHP query builder for JSON项目地址: https://gitcode.com/gh_mirrors/js/jsonqJsonQ 是一款优雅的PHP JSON查询构建器A PHP query builder for JSON让你能用类似 ORM 的链式语法轻松查询任何 JSON 数据。但当内置的where、whereContains等操作符无法满足复杂筛选时whereMatch正则匹配与macro自定义查询逻辑就是你的终极武器。本文将用通俗易懂的方式带你从零掌握这两项高级扩展让 PHP JSON 数据处理效率直接翻倍。为什么需要正则匹配与自定义宏先看一个场景你有一份用户数据想筛选出所有手机号以 88 开头的记录。用where(phone, startswith, 88)可以做到但如果要筛选88 开头且后跟 11 位数字的严格手机号格式呢内置操作符就无能为力了。这正是 JsonQ 两大高级特性的用武之地whereMatch正则匹配用正则表达式做模式匹配精准控制字符串格式macro宏注册你自己的判断函数实现任何脑洞大开的筛选逻辑两者都在where()的操作符体系内工作与 JsonQ 的链式查询无缝衔接堪称插上翅膀的 where。快速上手JsonQ 基础链式查询在进入高级特性前先回顾一下 JsonQ 的核心用法数据来自 examples/data.jsonuse Nahid\JsonQ\Jsonq; $q new Jsonq(data.json); $result $q-from(products) -where(cat, , 2) -get();这套「from()选路径 →where()加条件 →get()取结果」的链式语法是所有高级查询的地基。核心实现位于 src/Jsonq.php。第一招whereMatch 正则匹配完全教程whereMatch 的基础用法whereMatch的作用是判断字段值是否匹配某个正则表达式。它的操作符名为match正则表达式作为匹配值传入// 筛选手机号符合 88开头11位数字 格式的用户 $result $q-from(users) -where(phone, match, /^88[0-9]{11}$/) -get();也可以使用简写方法效果完全等价$result $q-from(users) -whereMatch(phone, /^88[0-9]{11}$/) -get();注意正则匹配只对字符串类型的数据有效这是它的天然边界使用时要确保字段值是字符串。三个高频正则场景示例场景一邮箱格式校验$result $q-from(users) -whereMatch(email, /^[\w.-][\w-]\.[\w.]$/) -get();场景二日期范围筛选2023年内的订单$result $q-from(orders) -whereMatch(created_at, /^2023-/) -get();场景三模糊关键词匹配产品名含mac或iPhone$result $q-from(products) -whereMatch(name, /(mac|iPhone)/i) -get();正则的匹配逻辑由 JsonQ 底层条件引擎驱动相关单元测试可参考 tests/ConditionTest.php 中的testMatch()其中展示了88[0-9]{11}这类正则的命中与不命中用例是理解匹配规则的最佳教材。第二招macro 自定义查询逻辑完全教程什么是 macro有时候正则也不够用——比如你想判断价格是否在某个区间且为偶数这种复杂逻辑用内置操作符很难表达。macro 宏就是为此设计的你可以注册一个自定义判断函数然后像内置操作符一样在where()中使用它。宏的注册与使用宏是静态注册的注册一次全局可用。参考 examples/index.php 中的经典写法use Nahid\JsonQ\Jsonq; // 第一步注册名为 less 的宏判断值是否小于给定值 Jsonq::macro(less, function ($payable, $val) { return $payable $val; }); // 第二步像内置操作符一样使用它 $result $q-from(products) -where(price, less, 50000) // 价格小于 5 万的商品 -get();宏函数的签名为function ($payable, $val)$payable数据中该字段的实际值$val你在where()中传入的第三个参数返回true表示匹配false表示排除宏的进阶玩法三个实用注册示例示例一判断整数类型Jsonq::macro(isInt, function ($payable, $val) { return is_integer($payable); }); $result $q-from(products) -where(stock, isInt) -get();示例二区间判断价格在 min 和 max 之间Jsonq::macro(between, function ($payable, $val) { return $payable $val[0] $payable $val[1]; }); $result $q-from(products) -where(price, between, [30000, 100000]) -get();示例三模糊业务判断判断用户是否为 VIPJsonq::macro(isVip, function ($payable, $val) { return $payable[level] 5 $payable[active] true; }); $result $q-from(users) -where(membership, isVip) -get();第三招组合拳——正则与宏的联合查询高级特性最大的魅力在于自由组合。你可以把whereMatch、macro 和链式方法混合使用构建复杂的业务查询// 筛选价格在区间内 名称匹配 mac 分类为 2并按价格降序 $result $q-from(products) -where(price, between, [50000, 150000]) -whereMatch(name, /mac/i) -where(cat, , 2) -sortBy(price, desc) -get();再配合orWhere实现或逻辑// 名称含 iPhone 或 价格小于 1.2 万 $result $q-from(products) -whereMatch(name, /iPhone/) -orWhere(price, less, 12000) -get();实用技巧与注意事项效率与性能建议优先使用内置操作符where、whereContains、whereStartsWith等内置条件性能更优whereMatch和 macro 只在确实需要时使用正则预编译意识在循环中对同一正则反复匹配时可先把正则编译好再传入宏的复用性把常用的宏集中注册比如写进一个独立的引导文件避免重复代码JsonQ 的辅助函数jsonq()定义在 helpers/jsonq.php可参考其组织方式常见坑位提醒⚠️whereMatch仅对字符串字段生效数值或 null 字段会直接不匹配可参考 tests/ConditionTest.php 中的matchProvider()边界用例⚠️ 正则表达式请用分隔符包裹如/pattern/i否则可能被当作普通字符串比较⚠️ macro 函数必须返回布尔值返回其他类型会导致判断失效⚠️ 宏是静态注册的注册名不要与内置操作符如match、contains冲突总结至此你已经完整掌握了 JsonQ 的两大高级扩展特性适用场景核心语法whereMatch字符串格式校验、模式匹配whereMatch(field, /regex/)macro任意自定义业务逻辑Jsonq::macro(名, fn)where(field, 名, val)当常规查询条件不够用时whereMatch正则匹配帮你解决格式问题macro自定义查询逻辑帮你解决业务问题两者结合几乎能覆盖所有复杂的 PHP JSON 数据筛选需求。把这两个能力加入你的工具箱JsonQ 就不再只是一个简单的 JSON 查询器而是一台真正可编程的JSON 数据处理引擎。快去 examples/ 目录看看更多实战示例动手把正则与宏用起来吧【免费下载链接】jsonqA PHP query builder for JSON项目地址: https://gitcode.com/gh_mirrors/js/jsonq创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

小红书无水印下载实战:三步用XHS-Downloader保存图文和视频

小红书无水印下载实战:三步用XHS-Downloader保存图文和视频

小红书无水印下载实战:三步用XHS-Downloader保存图文和视频 【免费下载链接】XHS-Downloader 小红书(XiaoHongShu、RedNote)链接提取/作品采集工具:提取账号发布、收藏、点赞、专辑作品链接;提取搜索结果作品、用户链接…

2026/10/25 23:59:53 阅读更多 →
不越狱也能给 iPhone 换位置:iFakeLocation 三平台虚拟定位完整指南

不越狱也能给 iPhone 换位置:iFakeLocation 三平台虚拟定位完整指南

不越狱也能给 iPhone 换位置:iFakeLocation 三平台虚拟定位完整指南 【免费下载链接】iFakeLocation Simulate locations on iOS devices on Windows, Mac and Ubuntu. 项目地址: https://gitcode.com/gh_mirrors/if/iFakeLocation 开发者做 LBS 应用测试时&…

2026/10/24 4:17:23 阅读更多 →
Java Swing+MySQL 小型宠物店宠物寄养管理系统 毕业设计 完整源码

Java Swing+MySQL 小型宠物店宠物寄养管理系统 毕业设计 完整源码

一、项目简介本项目是一款基于 Java Swing MySQL 开发的小型宠物店宠物寄养管理系统,适用于中小型宠物店日常寄养业务、宠物档案管理、客户管理、疫苗记录、库存管理、营收统计等场景。系统界面简洁、功能完整、代码结构清晰,非常适合作为 Java 课程设计…

2026/10/25 19:58:26 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/25 11:19:54 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/25 22:36:10 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/26 4:52:12 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/25 10:02:42 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/26 5:00:37 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/26 3:16:46 阅读更多 →

日新闻

周新闻

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/25 10:02:43 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/25 13:21:54 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/26 8:34:37 阅读更多 →