如何用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
相关产品推荐
相关产品推荐

