You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用正则匹配PHP中重复表达式的三元运算符简化场景?

直接用反向引用就能解决捕获组内容一致的问题,正则表达式和替换规则如下:

匹配正则

(\$[^?\s]+)\s*\?\s*\1\s*:

替换规则

$1 ?:

关键说明

  • (\$[^?\s]+):捕获第一个以$开头、不含问号和空白的表达式(对应你的$expression),存入捕获组1
  • \s*\?\s*:匹配问号前后的任意空白(兼容不同格式的空格/制表符)
  • \1:反向引用捕获组1的内容,强制要求第二个表达式和第一个完全一致,这就是解决你问题的核心
  • \s*::匹配冒号前的任意空白

示例验证

原代码:

$result = $this->system->cache('1234') ? $this->system->cache('1234') : $fallback;

替换后:

$result = $this->system->cache('1234') ?: $fallback;

补充提示

如果你的表达式里偶尔包含空白(你提到少数情况手动排查),可以适当调整正则的字符范围,但根据你描述的「通常不含空格」的场景,上面的正则已经能覆盖绝大多数情况。

内容的提问来源于stack exchange,提问作者Yimin Rong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 12:04:54