欢迎访问宙启技术站
智能推送

PHP中如何使用preg_replace函数用正则表达式替换字符串

发布时间:2023-06-06 10:47:45

preg_replace函数是PHP中用于执行全局正则表达式搜索和替换的函数。它的语法如下:

preg_replace(pattern, replacement, subject);

其中,pattern为正则表达式模式,replacement为用于替换的字符串或回调函数,subject为要进行搜索和替换的字符串。这个函数将返回被替换的字符串。

下面我们分别介绍一下pattern、replacement和subject这三个参数的用法和注意事项。

1. pattern参数

pattern参数是一个正则表达式模式,用于指定搜索条件。在模式中可以包含普通字符、元字符和模式修饰符。

1.1 普通字符

普通字符就是指字母、数字、空格和标点符号等。在模式中,普通字符只会匹配相应的字符,例如:

$str = "hello world";
$pattern = "/world/";
$replacement = "PHP";
echo preg_replace($pattern, $replacement, $str); //输出hello PHP

1.2 元字符

元字符是指在正则表达式中具有特殊意义的字符。例如,^、$、*、+、?、.、|、{、}、[]、()、\等字符都是元字符。下面我们逐个来讲解。

1.2.1 ^和$

^和$分别表示匹配字符串的开头和结尾:

$str = "hello world";
$pattern1 = "/^hello/";
$pattern2 = "/world$/";
$replacement = "PHP";
echo preg_replace($pattern1, $replacement, $str); //输出PHP world
echo preg_replace($pattern2, $replacement, $str); //输出hello PHP

1.2.2 *

*表示匹配前面的字符出现0次或多次:

$str = "hello world";
$pattern = "/l*/";
$replacement = "-";
echo preg_replace($pattern, $replacement, $str); //输出he-o wor-d

1.2.3 +

+表示匹配前面的字符出现1次或多次:

$str = "hello world";
$pattern = "/l+/";
$replacement = "-";
echo preg_replace($pattern, $replacement, $str); //输出he-o wor-d

1.2.4 ?

?表示匹配前面的字符出现0次或1次:

$str = "hello world";
$pattern = "/lo?/";
$replacement = "-";
echo preg_replace($pattern, $replacement, $str); //输出hel-o world

1.2.5 .

.表示匹配除换行符以外的任意一个字符:

$str = "hello world";
$pattern = "/o./";
$replacement = "-";
echo preg_replace($pattern, $replacement, $str); //输出hell- w-rld

1.2.6 |

|表示或的关系,即匹配两种或以上的模式:

$str = "hello world";
$pattern = "/(hello|world)/";
$replacement = "PHP";
echo preg_replace($pattern, $replacement, $str); //输出PHP PHP

1.2.7 {}

{}表示匹配前面的字符重复出现的次数。例如,{3,}表示至少重复3次,{3,5}表示重复3到5次:

$str = "hello world";
$pattern = "/l{2,}/";
$replacement = "-";
echo preg_replace($pattern, $replacement, $str); //输出he-o wor-d

1.2.8 []

[]表示匹配一组字符中的任意一个。例如,[abc]表示匹配a或b或c,[a-z]表示匹配a到z之间的任意一个字符:

$str = "hello world";
$pattern = "/[aeiou]/";
$replacement = "-";
echo preg_replace($pattern, $replacement, $str); //输出h-ll- w-rld

1.2.9 ()

()表示分组,将匹配模式分成一组,可以在替换的时候使用\\1、\\2等引用分组:

$str = "2022-02-02";
$pattern = "/(\d{4})-(\d{2})-(\d{2})/";
$replacement = "$2/$3/$1";
echo preg_replace($pattern, $replacement, $str); //输出02/02/2022

1.2.10 \

\表示转义字符,用于将元字符转义成普通字符。例如,\\表示转义成\,\+表示转义成+等。

$str = "hello+world";
$pattern = "/\+/";
$replacement = "-";
echo preg_replace($pattern, $replacement, $str); //输出hello-world

1.3 修饰符

修饰符可以修改正则表达式模式的行为。在PHP中,常用的修饰符有:i、s、m、u、x。

1.3.1 i

i修饰符表示不区分大小写:

$str = "Hello World";
$pattern = "/hello/i";
$replacement = "PHP";
echo preg_replace($pattern, $replacement, $str); //输出PHP World

1.3.2 s

s修饰符表示将字符串视为单行模式。在单行模式下,.可以匹配换行符:

$str = "hello
world";
$pattern = "/o.world/s";
$replacement = "-";
echo preg_replace($pattern, $replacement, $str); //输出hell-
                                                  //     world

1.3.3 m

m修饰符表示将字符串视为多行模式。在多行模式下,^和$可以匹配每一行的开头和结尾:

$str = "hello
world";
$pattern = "/^h/m";
$replacement = "PHP";
echo preg_replace($pattern, $replacement, $str); //输出PHPello
                                                 //     world

1.3.4 u

u修饰符表示将模式视为UTF-8编码下的Unicode字符串:

$str = "你好,世界!";
$pattern = "/[\x{4e00}-\x{9fa5}]+/u"; //匹配中文字符
$replacement = "-";
echo preg_replace($pattern, $replacement, $str); //输出-,!

1.3.5 x

x修饰符表示忽略空白字符(换行符、制表符和空格),可以让正则表达式更加易读:

$str = "hello  world";
$pattern = "/h e l l o/x";
$replacement = "PHP";
echo preg_replace($pattern, $replacement, $str); //输出PHP world

2. replacement参数

replacement参数是一个字符串或回调函数,用于指定替换内容。

2.1 字符串替换

当replacement参数是一个字符串时,替换内容将会是一个静态字符串,不会随着搜索模式的变化而变化。例如:

$str = "hello world";
$pattern = "/world/";
$replacement = "PHP";
echo preg_replace($pattern, $replacement, $str); //输出hello PHP

2.2 回调函数替换

当replacement参数是一个回调函数时,替换内容将会是一个动态字符串,可以根据搜索模式的变化而变化。回调函数必须接受一个matches数组参数,代表当前匹配的所有分组。例如:

$str = "2022-02-02";
$pattern = "/(\d{4})-(\d{2})-(\d{2})/";
$replacement = function($matches){
    return $matches[2].'/'.$matches[3].'/'.$matches[1];
};
echo preg_replace_callback($pattern, $replacement, $str); //输出02/02/2022

3. subject参数

subject参数是要进行搜索和替换的字符串。可以是一个字符串或字符串数组。

`php

$str = "hello world";

$pattern = "/world/";

$replacement = "PHP";

echo preg_replace($pattern, $replacement, $str); //输出hello PHP

$str = array("hello world", "hello php");

$pattern = "/hello/";

$replacement = "hi";

echo preg_replace($pattern, $replacement, $str); //输出hi world、hi