PHP函数:preg_replace和preg_replace_callback 【详记】-1.preg_replace

时间:2024-10-21 10:24:19

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

参数说明:

  1. $pattern:正则表达式模式,匹配需要替换的部分。可以是字符串或数组,支持多个模式。
  2. $replacement:替换的内容。如果 $pattern 是数组,$replacement 也可以是数组,每个模式对应一个替换内容。
  3. $subject:要进行替换的字符串或数组。
  4. $limit(可选):限制替换的次数。默认值为 -1,表示不限制替换次数。
  5. $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 记录实际替换的次数。