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

如何使用PHP从文本文件中匹配指定起止位置的内容

解决方案

核心思路

  • 调整正则匹配规则,限定仅检查行首跳过2个字符后的11位区间,避免整行匹配的误判
  • 修正输出逻辑,避免多个匹配结果时切割错位

修改后的完整代码

<?php
$file = 'masterfile.out';
$searchfor = '02354098780';

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

// 读取文件内容
$contents = file_get_contents($file);
// 转义搜索内容里的正则特殊字符
$pattern = preg_quote($searchfor, '/');
// 正则调整:行首匹配2个任意字符后直接匹配目标内容,限定校验区间
$pattern = "/^.{2}{$pattern}/m";

// 执行匹配
if(preg_match_all($pattern, $contents, $matches)){
   echo "匹配到结果:\n";
   // 遍历每个匹配行单独截取,避免多结果拼接后切割错位
   foreach ($matches[0] as $matchLine) {
       // 取前2位之后的11位,对应你要的区间内容
       echo substr($matchLine, 2, 11) . "\n";
       // 如果还需要取166位开始的11位,也对每行单独截取即可
       // echo substr($matchLine, 166, 11) . "\n";
   }
}
else{
   echo "未匹配到结果";
}
?>

改动说明

  • 正则规则优化:将原来整行模糊匹配的/^.*$pattern.*$/m改为位置限定的规则,^匹配行开头,.{2}跳过行前2位字符,之后直接匹配目标字符串,刚好对应「第3位开始、长度11位」的校验要求,只有该区间匹配才会命中,不会因为行内其他位置出现相同字符串导致误判
  • 输出逻辑修正:原来对所有匹配结果拼接后统一截取的逻辑,在有多个匹配结果时会出现内容错位,改为遍历每个匹配行单独截取,结果更准确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 18:06:04