提取条件表达式中的多个条件及逻辑运算符
从一个形如"条件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 创作工具。
Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。
Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。















