preg_replace 函数执行一个正则表达式的搜索和替换。

函数参数说明

  • $pattern: 要搜索的模式,可以是字符串或一个字符串数组。
  • $replacement: 用于替换的字符串或字符串数组。
  • $subject: 要搜索替换的目标字符串或字符串数组。
  • $limit: 可选,对于每个模式用于每个 subject 字符串的最大可替换次数。 默认是-1(无限制)。
  • $count: 可选,为替换执行的次数。

这里有一篇文章,关于replacement如何使用。

一个实例

这个实例是在fancybox标签构建的时候看到的,研究了好一阵才明白其中的原理。

function fancybox ($content){
    global $post;
    $pattern = "/<img(.*?)src=('|\")([^>]*).(bmp|gif|jpeg|jpg|png|swf)('|\")(.*?)\/>/i";
    $replacement = '<a$1href=$2$3.$4$5 data-fancybox="kanochan-images"$6><img$1src=$2$3.$4$5$6></a>';
    $content = preg_replace($pattern, $replacement, $content);
    return $content;
}

原始文本

<img src="https://p.kksk.ltd/2022/09/02/202209022213304.png" alt="image-20220902221322442" />

替换后的文本

<a href="https://p.kksk.ltd/2022/09/02/202209022213304.png" data-fancybox="images" alt="image-20220902221322442" ><img src="https://p.kksk.ltd/2022/09/02/202209022213304.png" alt="image-20220902221322442" /></a>

参数解析

  • $1 -> (.?) --> .:匹配除了换行“\n”外的任何字符;:匹配前面的子表达式零次或多次;?:当该字符紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串 --> null
  • $2 --> ('|\") --> 匹配单引号或双引号 --> "
  • $3 -> ([^/>]*) --> 匹配除了“>”之外的任何字符,并进行零次或多次匹配 --> 结果是:https://p.kksk.ltd/2022/09/02/202209022213304
  • $4 --> (bmp|gif|jpeg|jpg|png|swf) --> 匹配图片扩展名 --> png
  • $5 --> ('|\") --> 匹配单引号或双引号 --> "
  • $6 -> (.*?) --> 匹配信息同$1 --> null
この素晴らしい世界に祝福を!
最后更新于 2023-05-19