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

如何使用PHP提取指定字符串之间的子串?

用PHP提取指定字符串之间的子串

嘿,刚好碰到过类似需求,针对你提供的siva.txt内容,我给你整理了两种靠谱的PHP实现方法,轻松提取两个目标字符串之间的子串:

方法一:用strpos() + substr()(基础直观款)

这种方法适合匹配固定的起始和结束字符串,逻辑清晰,容易调试。比如我们要提取siva.txt里SIVA和PRABU之间的内容,代码可以这么写:

// 读取siva.txt文件内容
$fileContent = file_get_contents('siva.txt');
if ($fileContent === false) {
    die('无法读取siva.txt文件');
}

// 定义起始和结束标记
$startMarker = 'SIVA';
$endMarker = 'PRABU';

// 查找标记的位置
$startPos = strpos($fileContent, $startMarker);
$endPos = strpos($fileContent, $endMarker);

// 检查标记是否存在,并且起始位置在结束位置之前
if ($startPos === false || $endPos === false || $startPos > $endPos) {
    echo '未找到指定的标记或标记顺序错误';
} else {
    // 计算子串的起始位置(要跳过起始标记本身)
    $substringStart = $startPos + strlen($startMarker);
    // 计算子串长度
    $substringLength = $endPos - $substringStart;
    // 提取子串
    $result = substr($fileContent, $substringStart, $substringLength);
    // 输出结果
    echo trim($result);
}

方法二:用正则表达式(灵活适配款)

如果需要更灵活的匹配规则(比如忽略大小写、匹配多个结果),正则表达式会更方便。还是以提取SIVA到PRABU之间的内容为例:

$fileContent = file_get_contents('siva.txt');
if ($fileContent === false) {
    die('无法读取siva.txt文件');
}

$pattern = '/SIVA(.*?)PRABU/s';
preg_match($pattern, $fileContent, $matches);

if (!empty($matches[1])) {
    echo trim($matches[1]);
} else {
    echo '未找到匹配的内容';
}

这里正则里的/s修饰符是让.匹配换行符,如果你的文本有多行内容,这个很有用;.*?是非贪婪匹配,确保只取两个标记之间的最短内容,避免匹配到后面的其他标记。

小提示

  • 如果你的起始或结束标记包含特殊正则字符(比如.、*),记得用preg_quote()转义,避免正则匹配出错。
  • 处理大文件时,file_get_contents()可能会占用较多内存,这时可以考虑逐行读取文件并匹配,优化内存使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:06:53