提取条件表达式中的多个条件及逻辑运算符
从一个形如"条件A等于值A-与-条件B等于值B"的字符串中,首先通过正则表达式提取括号内的子串,再按"-与-"或"-或-"这组分隔符进行拆分,并保留这些分隔符,得到条件和逻辑运算符交替排列的数组,便于后续逻辑解析或条件判断。
在日常开发中,尤其是处理自定义规则引擎或低代码逻辑解析时,经常需要把嵌套在 if(...) 里、用 -AND- 或 -OR- 串起来的条件表达式,拆成可以独立操作的原子单元。本文就聊聊怎么用 PHP 正则,从类似 if(conditionA==valueA-AND-conditionB==valueB-OR-conditionC==valueC) 这样的字符串里,精准捞出每个条件子串和逻辑连接符,最后还能给到一个结构清晰的数组。
处理这种动态条件语句时,很多人第一反应可能是想用单次 preg_match 把整个结构一把抓出来。但实际操作下来会发现,要把条件和运算符干净利落地分开,单次匹配往往顾此失彼,容易翻车。更靠谱的做法是两步走:先把括号里的主体提取出来,然后按带捕获的分隔符一刀刀切开。
来看一段直接能用的实现方案:
$string = "if(conditionA==valueA-AND-conditionB==valueB-OR-conditionC==valueC)";// 第一步:匹配 if(...) 结构,提取括号内完整内容(不包含 if 和括号)if (preg_match('/^if\((.+)\)$/', $string, $matches)) { $body = $matches[1]; // → "conditionA==valueA-AND-conditionB==valueB-OR-conditionC==valueC" // 第二步:使用 preg_split + PREG_SPLIT_DELIM_CAPTURE 拆分 // 模式 \-(AND|OR)\- 会匹配 "-AND-" 或 "-OR-",并捕获其中的 AND/OR $parts = preg_split('/\-(AND|OR)\-/', $body, -1, PREG_SPLIT_DELIM_CAPTURE); print_r($parts);}// 输出:// Array// (// [0] => conditionA==valueA// [1] => AND// [2] => conditionB==valueB// [3] => OR// [4] => conditionC==valueC// )
这里有几个关键点值得留意:
- PREG_SPLIT_DELIM_CAPTURE 是核心——它让分隔符里被括号捕获的子模式(也就是 AND 或 OR)也能作为独立元素保留在结果数组中,实现了“条件+运算符”交替排列的效果。少了这个参数,结果就得自己去猜运算符插在哪个位置。
- 第一步的正则
/^if\((.+)\)$/,用非贪婪匹配.+就够用了,因为结尾固定是),不需要再加U修饰符。当然,如果需要处理嵌套括号的情况(比如if((a==b)-AND-c==d)),那就得用递归正则或者词法分析器,不过本文先不展开。 - 如果原始字符串里可能混有空格,比如
if( a==1 -AND- b==2 ),建议在preg_split之前先对$body做一次trim(),或者在正则中加上\s*,写成/\s*\-(AND|OR)\-\s*/,鲁棒性会更好。
进阶一下:拿到 $parts 之后,可以很轻松地构建条件树或者做顺序校验。比如:
$conditions = [];$operators = [];for ($i = 0; $i < count($parts); $i++) { if ($i % 2 === 0) { $conditions[] = $parts[$i]; // 偶数索引为条件 } else { $operators[] = $parts[$i]; // 奇数索引为 AND/OR }}// $conditions = ['conditionA==valueA', 'conditionB==valueB', 'conditionC==valueC']// $operators = ['AND', 'OR']
这套方案简洁、可读性强,基本覆盖了大多数基于连字符分隔的条件解析场景。而且扩展起来也很方便——假如哪天需要在逻辑中支持 NOT,只需要把正则里的 (AND|OR) 改成 (AND|OR|NOT) 就完事了。
Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。
Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
一款文字处理软件,一种订阅式的跨平台办公软件,基于云平台提供多种服务,通过将 Excel 和 Outlook 等应用与 OneDrive 和 Microsoft Teams 等强大的云服务相结合,Office 365 可让任何人使用任何设备随时随地创建和共享内容。
CodeExpander 是一款快捷短语输入增强工具,通过键入缩写自动展开为自定义文段,提升工作效率。任务管理和过程控制会更完整,持续下载、批量同步或需要稳定传输流程的场景会更适合它。
Mountain Duck 是一款能将多个网盘挂载到本地的工具,像本地磁盘一样使用网盘。清理链路的完整性会更好一些,做应用卸载、残留处理和空间整理时,通常能少走很多手动排查步骤。
Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。
Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
一款文字处理软件,一种订阅式的跨平台办公软件,基于云平台提供多种服务,通过将 Excel 和 Outlook 等应用与 OneDrive 和 Microsoft Teams 等强大的云服务相结合,Office 365 可让任何人使用任何设备随时随地创建和共享内容。
Wise Folder Hider Pro 是一款专业级文件和文件夹隐藏加密软件,为私密数据添加多重保护。高频操作更强调就近处理,浏览、整理和跨目录移动文件时,来回切换和重复点击都会少很多。
CodeExpander 是一款快捷短语输入增强工具,通过键入缩写自动展开为自定义文段,提升工作效率。任务管理和过程控制会更完整,持续下载、批量同步或需要稳定传输流程的场景会更适合它。


























