当前位置: 首页> 最新文章列表> 想从左边截取字符串?教你用 substr 函数实现高效子串提取

想从左边截取字符串?教你用 substr 函数实现高效子串提取

gitbox 2025-09-09

在PHP中,字符串操作是开发过程中最常用的功能之一。无论是在处理用户输入、生成动态内容,还是从某些长文本中提取有用的信息,我们都可能需要截取字符串。而PHP提供了许多强大的函数来帮助我们高效地处理字符串,substr就是其中之一。

什么是 substr 函数?

substr 是 PHP 中的一个内建函数,用来从一个字符串中截取指定的部分。通过它,你可以轻松地从字符串的任意位置开始,提取出一个子串。

函数原型

<span><span><span class="hljs-title function_ invoke__">substr</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$string</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$start</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span>|</span><span><span class="hljs-literal">null</span></span><span> </span><span><span class="hljs-variable">$length</span></span><span> = </span><span><span class="hljs-literal">null</span></span><span>): </span><span><span class="hljs-keyword">string</span></span><span>|</span><span><span class="hljs-literal">false</span></span><span>
</span></span>
  • $string:需要截取的原始字符串。

  • $start:起始位置,可以是负数,表示从字符串末尾开始计算。

  • $length(可选):截取的长度。如果省略,则表示从起始位置一直截取到字符串的末尾。

使用 substr 函数从左边截取字符串

假设我们有一个字符串 "Hello, world!",如果想从左边截取出前5个字符,可以使用 substr 函数。代码如下:

<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$string</span></span><span> = </span><span><span class="hljs-string">"Hello, world!"</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">substr</span></span><span>(</span><span><span class="hljs-variable">$string</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-number">5</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$result</span></span><span>;  </span><span><span class="hljs-comment">// 输出: Hello</span></span><span>
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

在这个例子中,0 表示从字符串的第一个字符开始,5 表示截取长度为 5 的子串。所以输出结果是 "Hello"

动态控制截取的长度

你还可以根据动态条件来控制截取的长度。例如,如果你想根据某个条件只截取字符串的一部分,可以将 $length 设置为变量值:

<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$string</span></span><span> = </span><span><span class="hljs-string">"Welcome to PHP world!"</span></span><span>;
</span><span><span class="hljs-variable">$length</span></span><span> = </span><span><span class="hljs-number">7</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">substr</span></span><span>(</span><span><span class="hljs-variable">$string</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-variable">$length</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$result</span></span><span>;  </span><span><span class="hljs-comment">// 输出: Welcome</span></span><span>
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

处理负数索引

substr 函数支持负数索引,这意味着你可以从字符串的右边开始截取。这对于处理一些从右边开始的字符串操作非常有用。

举个例子,假如你想从字符串的最后三个字符开始截取:

<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$string</span></span><span> = </span><span><span class="hljs-string">"Learning PHP is fun!"</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">substr</span></span><span>(</span><span><span class="hljs-variable">$string</span></span><span>, -</span><span><span class="hljs-number">3</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$result</span></span><span>;  </span><span><span class="hljs-comment">// 输出: fun</span></span><span>
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

在这里,-3 表示从字符串的倒数第三个字符开始截取,直到字符串的末尾。

实际应用:提取文件扩展名

一个常见的场景是提取文件名的扩展名。假设你有一个文件路径,并且你需要获取文件的扩展名。你可以通过结合 substrstrrpos 函数来实现这一点。

<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$file_name</span></span><span> = </span><span><span class="hljs-string">"document.pdf"</span></span><span>;
</span><span><span class="hljs-variable">$dot_position</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strrpos</span></span><span>(</span><span><span class="hljs-variable">$file_name</span></span><span>, </span><span><span class="hljs-string">'.'</span></span><span>);  </span><span><span class="hljs-comment">// 查找最后一个点的位置</span></span><span>
</span><span><span class="hljs-variable">$extension</span></span><span> = </span><span><span class="hljs-title function_ invoke__">substr</span></span><span>(</span><span><span class="hljs-variable">$file_name</span></span><span>, </span><span><span class="hljs-variable">$dot_position</span></span><span> + </span><span><span class="hljs-number">1</span></span><span>);  </span><span><span class="hljs-comment">// 截取点后面的部分</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$extension</span></span><span>;  </span><span><span class="hljs-comment">// 输出: pdf</span></span><span>
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

在这个例子中,strrpos 用来找到文件名中最后一个点的位置,然后使用 substr 从点的位置后面开始截取,获取文件的扩展名。

注意事项

  1. 超出范围的 $start$length 参数:如果 $start 参数大于字符串的长度,或者 $length 超出了剩余的字符数,substr 函数会返回空字符串或完整的字符串。要小心处理这些情况,以避免不必要的错误。

  2. 支持多字节字符集:PHP的 substr 函数对多字节字符(如中文字符)可能会有一些限制。如果你需要处理多字节字符集,建议使用 mb_substr 函数来代替 substr

总结

substr 函数是 PHP 中非常实用的一个工具,它可以帮助我们从左边截取指定长度的子串,甚至支持从右边截取部分字符串。通过合理使用这个函数,可以极大地简化字符串处理工作,提升代码的可读性和效率。在实际开发中,我们可以利用 substr 函数灵活地完成各种字符串提取任务,不仅适用于固定长度截取,也能应对动态条件下的截取需求。