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

从正则捕获组提取值:基于给定正则与PHP判断实现指定输出

正则匹配与PHP捕获组提取实现方案

正则表达式解析

你选用的正则表达式 ^(?:([0-9]+) X,)?(?: )?(?:([0-9]+) Y,)?(?: Z)?$ 完全适配目标匹配场景,这里拆解下核心逻辑:

  • ([0-9]+) X,:捕获组1,负责匹配「数字+X,」格式,外层的?:将其包装为可选非捕获组
  • ([0-9]+) Y,:捕获组2,同理匹配「数字+Y,」格式,同样设为可选
  • (?: Z)?:匹配可选的, Z或 Z后缀,不捕获该部分内容

PHP完整实现代码

结合你的输出需求,我把正则匹配和判断逻辑整合为可直接运行的代码,方便测试不同输入:

<?php
// 准备所有测试输入案例
$testCases = [
    '66 X, 55 Y, Z',
    '66 X, 55 Y,',
    '66 X, Z',
    '55 Y, Z',
    '66 X, 55 Y'
];

foreach ($testCases as $input) {
    $regex = '/^(?:([0-9]+) X,)?(?: )?(?:([0-9]+) Y,)?(?: Z)?$/';
    preg_match($regex, $input, $matches);
    
    // 提取捕获组,不存在则返回null
    $group1 = isset($matches[1]) ? $matches[1] : 'null';
    $group2 = isset($matches[2]) ? $matches[2] : 'null';
    
    // 按指定格式输出
    echo "输入内容: {$input}\n输出结果: {$group1} - {$group2}\n\n";
}
?>

测试运行结果

执行上述代码后,会得到如下输出:

输入内容: 66 X, 55 Y, Z
输出结果: 66 - 55

输入内容: 66 X, 55 Y,
输出结果: 66 - 55

输入内容: 66 X, Z
输出结果: 66 - null

输入内容: 55 Y, Z
输出结果: null - 55

输入内容: 66 X, 55 Y
输出结果: 66 - 55

小补充

如果需要严格限制X和Y部分之间必须有空格,可以把正则里的(?: )?替换为单个空格 ;如果要兼容无空格的情况(比如66 X,55 Y, Z),当前的正则已经可以覆盖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:52:27