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

Laravel中从WHOIS响应提取域名服务器遇PCRE2问题求助

解决Laravel中提取WHOIS响应域名服务器的问题

错误原因分析

你遇到的PCRE2编译错误,是因为正则中使用了\u003C这种PCRE2不支持的转义序列,同时代码里的正则多了个多余的@符号,且preg_match只能匹配单个结果,无法获取所有域名服务器。

方案一:修正正则表达式(推荐)

使用preg_match_all匹配所有域名服务器,同时将\u003C替换为直接的<字符(或使用\x3C十六进制转义),修正后的代码如下:

// 假设$responseData3是包含WHOIS响应的字符串
preg_match_all('/nserver:\s*(.*?)<br/', $responseData3, $matches);

if (!empty($matches[1])) {
    $nameservers = $matches[1];
    dd($nameservers); // 输出所有域名服务器数组
} else {
    dd("No nameserver found.");
}

如果WHOIS响应里的<br是带空格的<br /,可以调整正则为:

preg_match_all('/nserver:\s*(.*?)<br\s*\/?/', $responseData3, $matches);

方案二:字符串分割法(无需正则)

如果对正则不熟悉,可以用字符串函数分步处理:

// 先按换行分割WHOIS内容
$lines = explode("\n", $responseData3);
$nameservers = [];

foreach ($lines as $line) {
    // 筛选以nserver:开头的行
    if (str_starts_with(trim($line), 'nserver:')) {
        // 分割出域名服务器部分,去除多余的<br标签
        $parts = explode(':', $line);
        $ns = trim($parts[1]);
        $ns = str_replace(['<br /', '<br'], '', $ns);
        $nameservers[] = trim($ns);
    }
}

if (!empty($nameservers)) {
    dd($nameservers);
} else {
    dd("No nameserver found.");
}

额外注意事项

  • 确保$responseData3是解析后的WHOIS字符串,而不是原始的JSON(如果是JSON需要先json_decode取出whois字段)。
  • 不同WHOIS服务器的响应格式可能不同,上述方法针对IRNIC的响应格式优化,若处理其他域名后缀可能需要调整匹配规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 04:35:17