substr 是一个用于从字符串中提取子字符串(substring)的函数,它的名字来源于 "substring" 的缩写,几乎所有主流的编程语言都支持这个功能,尽管具体的语法和参数名称可能略有不同。

核心概念
substr 的核心思想是:给定一个原始字符串,你告诉它从哪个位置开始,以及要截取多长的字符,它会返回一个新的字符串。
语法和参数
substr 函数通常接受三个参数,但最核心的是前两个。
通用语法:
// 这是 JavaScript 中的语法,非常具有代表性 new_string = original_string.substr(start_index, length);
参数详解:

-
start_index(起始索引):- 指定从哪个位置开始截取。
- 重要: 在绝大多数语言(如 JavaScript, PHP, C++)中,索引都是从 0 开始的,也就是说,字符串的第一个字符的索引是
0,第二个是1,以此类推。 start_index是一个负数,它通常表示从字符串的末尾开始倒数。-1表示最后一个字符,-2表示倒数第二个字符。start_index超出了字符串的长度,大多数实现会返回一个空字符串。
-
length(长度):- 指定要截取的字符数量。
- 这是一个可选参数,如果省略,函数会从
start_index开始,一直截取到字符串的末尾。 length为 0 或负数,通常会返回一个空字符串。- 如果指定的
length导致截取超出了字符串的末尾,函数会自动截取到字符串末尾而不会报错。
在不同编程语言中的示例
虽然核心思想相同,但不同语言的细节有差异。
a) JavaScript
JavaScript 的 substr 方法是 String 对象的一个方法。

let str = "Hello, World!"; // 示例 1: 从索引 7 开始,截取 5 个字符 let sub1 = str.substr(7, 5); // "World" console.log(sub1); // 示例 2: 省略 length,从索引 7 开始截取到末尾 let sub2 = str.substr(7); // "World!" console.log(sub2); // 示例 3: 使用负数的 start_index (从末尾倒数) // -6 表示从倒数第6个字符开始,即 'W' let sub3 = str.substr(-6); // "World!" console.log(sub3); // 示例 4: start_index 超出范围 let sub4 = str.substr(20); // 返回空字符串 "" console.log(sub4); // 示例 5: length 为负数 let sub5 = str.substr(7, -2); // 返回空字符串 "" console.log(sub5);
注意: 在 JavaScript 中,
substr已被标记为遗留方法 (legacy),不推荐在新代码中使用,推荐使用更现代、更符合逻辑的substring()或slice()方法。
substring(start, end): 接受开始和结束索引(不包含结束索引)。slice(start, end): 功能与substring类似,但支持负数索引,并且行为更一致。
b) PHP
PHP 中 substr 是一个内置函数。
<?php $str = "Hello, World!"; // 示例 1: 从索引 7 开始,截取 5 个字符 $sub1 = substr($str, 7, 5); // "World" echo $sub1 . "\n"; // 示例 2: 省略 length,从索引 7 开始截取到末尾 $sub2 = substr($str, 7); // "World!" echo $sub2 . "\n"; // 示例 3: 使用负数的 start_index // -6 表示从倒数第6个字符开始 $sub3 = substr($str, -6); // "World!" echo $sub3 . "\n"; // 示例 4: start_index 为负,length 也为正 // 从倒数第6个字符开始,截取2个字符 $sub4 = substr($str, -6, 2); // "Wo" echo $sub4 . "\n"; ?>
c) Python
Python 字符串没有名为 substr 的方法,而是使用切片语法 [:],其功能与 substr 类似但更强大。
str = "Hello, World!" # 示例 1: 从索引 7 开始,截取到索引 12 (不包含12) # 等效于 substr(7, 5) sub1 = str[7:12] print(sub1) # "World" # 示例 2: 从索引 7 开始,截取到末尾 # 等效于 substr(7) sub2 = str[7:] print(sub2) # "World!" # 示例 3: 使用负数索引 # -6 表示倒数第6个字符 sub3 = str[-6:] print(sub3) # "World!" # 示例 4: 截取最后5个字符 sub4 = str[-5:] print(sub4) # "rld!"
与 substring 和 slice 的区别 (以 JavaScript 为例)
理解 substr 与其他方法的区别很重要,尤其是在 JavaScript 中。
| 方法 | 语法 | 描述 | 示例 str = "Hello" |
|---|---|---|---|
substr |
str.substr(start, length) |
从 start 开始,提取 length 个字符。 |
str.substr(1, 3) -> "ell" |
substring |
str.substring(start, end) |
提取从 start 到 end (不包含 end) 之间的字符。 |
str.substring(1, 3) -> "el" |
slice |
str.slice(start, end) |
与 substring 类似,但支持负数索引,且行为更一致。 |
str.slice(1, 3) -> "el"str.slice(-3) -> "llo" |
substr是什么? 一个用于从字符串中提取子串的函数。- 核心参数是什么?
start_index: 从哪里开始(从0开始计数)。length: 截取多长(可选,默认到末尾)。
- 负索引怎么用? 通常表示从字符串末尾倒数(如
-1是最后一个字符)。 - 在现代编程语言中地位如何?
- 在 JavaScript 中,
substr是遗留方法,推荐使用slice()或substring()。 - 在 PHP 中,
substr仍然是常用且推荐的方法。 - 在 Python 中,没有
substr函数,使用切片语法[:]。
- 在 JavaScript 中,
希望这个详细的解释能帮助你完全理解 substr 命令!
