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

如何用PHP变量搜索文本文件并提取指定区间内容

完善PHP脚本提取目标域名

没问题,我来帮你调整脚本,精准提取你需要的域名部分。你的核心需求是用预定义的$name变量匹配文件里对应的邮箱,然后提取@之后、|之前的域名,对吧?

先看一下调整后的完整脚本:

<?php
$name = 'my.name';
$file = "people.txt";

// 防止浏览器解析为HTML
header('Content-Type: text/plain');

// 读取文件内容,增加读取失败的判断
$contents = file_get_contents($file);
if ($contents === false) {
    echo "无法读取文件或文件不存在";
    exit;
}

// 对搜索变量转义正则特殊字符,避免正则语法冲突
$searchPattern = preg_quote($name, '/');

// 构造精准匹配的正则表达式
// 解释:
// - {$searchPattern}@ :精准匹配变量对应的前缀+@符号
// - ([^|]+) :捕获所有非|的字符,也就是我们要提取的域名部分
// - \| :匹配后面的分隔竖线,确保只取到竖线前的内容
$regex = "/{$searchPattern}@([^|]+)\|/";

// 执行匹配并提取结果
if (preg_match($regex, $contents, $matches)) {
    // $matches[1]就是正则里括号捕获到的域名
    echo "提取到的域名:" . $matches[1];
} else {
    echo "未找到匹配的内容";
}
?>

关键调整说明:

  • 替换硬编码值:把原来固定的搜索字符串换成你预定义的$name变量,让脚本更灵活适配不同的搜索目标。
  • 优化正则逻辑:不再匹配整行内容,而是精准定位到$name@之后、|之前的目标区域,用括号()捕获域名,直接从匹配结果中提取需要的部分。
  • 增加异常处理:加入file_get_contents的返回值检查,避免文件读取失败时脚本无意义执行。
  • 简化输出:直接输出捕获到的域名,不需要返回整行匹配内容,更贴合你的需求。

如果你的people.txt里存在多个包含$name的邮箱条目,可以把preg_match换成preg_match_all,然后遍历$matches[1]数组输出所有匹配的域名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:30:44