preg_replace()
是 PHP 中的一个函数,用于使用正则表达式搜索并替换字符串中的内容。preg_replace()
直接将匹配的结果替换为指定的字符串,而不需要通过回调函数动态生成替换内容。
函数签名:
preg_replace(
string|array $pattern,
string|array $replacement,
string|array $subject,
int $limit = -1,
int &$count = null
): string|array|null
参数说明:
-
$pattern
:正则表达式模式,匹配需要替换的部分。可以是字符串或数组,支持多个模式。 -
$replacement
:替换的内容。如果$pattern
是数组,$replacement
也可以是数组,每个模式对应一个替换内容。 -
$subject
:要进行替换的字符串或数组。 -
$limit
(可选):限制替换的次数。默认值为-1
,表示不限制替换次数。 -
$count
(可选):传入的变量,用于记录实际进行了多少次替换。
返回值:
- 如果
$subject
是字符串,返回一个替换后的字符串。 - 如果
$subject
是数组,返回一个替换后的数组。 - 如果没有匹配项,或者发生错误,返回
null
。
用法示例
1. 简单替换
$subject = "I have 123 apples and 456 oranges.";
$pattern = '/\d+/'; // 匹配所有数字
$replacement = 'many'; // 替换为 "many"
$result = preg_replace($pattern, $replacement, $subject);
echo $result; // 输出: I have many apples and many oranges.
解释:
- 正则表达式
/\d+/
匹配任意连续的数字。 - 将所有匹配的数字替换为字符串
"many"
。
2. 使用模式替换多个内容
$subject = "I like red apples, blue berries, and green grapes.";
$pattern = ['/red/', '/blue/', '/green/']; // 匹配 "red"、"blue"、"green"
$replacement = ['yellow', 'purple', 'orange']; // 替换为 "yellow"、"purple"、"orange"
$result = preg_replace($pattern, $replacement, $subject);
echo $result; // 输出: I like yellow apples, purple berries, and orange grapes.
解释:
- 使用数组格式的
$pattern
和$replacement
,实现对多个不同模式进行替换。
3. 限制替换次数
$subject = "123 456 789 101112";
$pattern = '/\d+/'; // 匹配所有数字
$replacement = 'number'; // 替换为 "number"
$result = preg_replace($pattern, $replacement, $subject, 2);
echo $result; // 输出: number number 789 101112
解释:
- 设置
limit = 2
,表示只替换前两个匹配的数字,其余部分保持不变。
4. 捕获组替换
$subject = "John Smith, Jane Doe";
$pattern = '/(\w+) (\w+)/'; // 匹配名字和姓氏
$replacement = '$2, $1'; // 替换顺序为“姓氏, 名字”
$result = preg_replace($pattern, $replacement, $subject);
echo $result; // 输出: Smith, John, Doe, Jane
解释:
- 使用捕获组
(\w+) (\w+)
匹配名字和姓氏。 - 替换时使用
$2
引用第二个捕获的内容(姓氏),$1
引用第一个捕获的内容(名字)。
5. 使用 $count
记录替换次数
$subject = "apple, orange, banana, apple, orange";
$pattern = '/apple/'; // 匹配 "apple"
$replacement = 'pear'; // 替换为 "pear"
$count = 0; // 记录替换次数
$result = preg_replace($pattern, $replacement, $subject, -1, $count);
echo $result; // 输出: pear, orange, banana, pear, orange
echo "Replacements: $count"; // 输出: Replacements: 2
解释:
- 使用
$count
参数记录总共进行了多少次替换。
总结
-
preg_replace()
用于通过正则表达式在字符串中查找匹配项,并用指定的替换内容替换它们。 - 通过
$pattern
和$replacement
的灵活组合,可以执行简单的替换、多个模式替换、捕获组替换等。 - 还可以通过
$limit
控制替换的次数,或使用$count
记录实际替换的次数。