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

配置文件解析器处理服务器范围格式的技术求助

解决方案

1. 优化正则匹配规则

你当前的正则表达式无法精准提取范围的起始/结束数字以及前后缀,需要调整规则来捕获四个核心部分:

  • 服务器前缀(如s)
  • 范围起始数字(如01)
  • 范围结束数字(如19)
  • 域名后缀(如.domen.local)

推荐使用以下正则:

$pattern = '/^([a-z]+)\[(\d+):(\d+)\](\..+)$/i';

2. 解析范围并展开条目

匹配成功后,需要完成三个关键操作:

  • 将起始/结束数字转为整数,实现范围遍历
  • 保留原数字的补零格式(比如输出01而非1)
  • 循环生成每个独立的服务器条目

完整代码示例

替换你现有的判断逻辑,使用以下代码:

$s_tmp = trim($s_tmp);

// 匹配范围格式的服务器条目
$pattern = '/^([a-z]+)\[(\d+):(\d+)\](\..+)$/i';
if (preg_match($pattern, $s_tmp, $matches)) {
    $prefix = $matches[1];       // 提取前缀,例如"s"
    $start = intval($matches[2]);// 转换起始数字为整数,例如1
    $end = intval($matches[3]);  // 转换结束数字为整数,例如19
    $suffix = $matches[4];       // 提取域名后缀,例如".domen.local"
    $digitLength = strlen($matches[2]); // 获取原数字的位数,例如2位

    // 遍历范围生成每个服务器条目
    for ($i = $start; $i <= $end; $i++) {
        // 格式化数字,补零到原位数
        $formattedNum = str_pad($i, $digitLength, '0', STR_PAD_LEFT);
        $server = $prefix . $formattedNum . $suffix;
        echo $server . "<br />";
    }
} else {
    // 普通条目直接输出
    echo $s_tmp . "<br />";
}

关键细节说明

  • 正则匹配:/i修饰符确保前缀不区分大小写;^和$限定匹配整行,避免部分匹配的情况。
  • 数字补零:用str_pad保持原有的数字位数,确保生成的服务器名和原格式一致,不会出现s1.domen.local这种不符合要求的条目。
  • 范围遍历:将起始/结束数字转为整数后,通过for循环逐个生成条目,覆盖范围内的所有数值。

测试效果

对于输入s[01:19].domen.local,会输出:

s01.domen.local
s02.domen.local
...
s19.domen.local

对于s[34:59].domen.local,会输出s34到s59的所有服务器条目。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 07:55:33