php正则表达式的匹配与替换

Posted 孤舟残月浅笑嫣

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php正则表达式的匹配与替换相关的知识,希望对你有一定的参考价值。

  只介绍两个与Perl兼容的正则表达式函数:

  1.preg_match_all 函数执行正则表达式匹配与搜索;

  2.preg_replace 函数执行正则表达式匹配与替换。

  示例代码:

<?php

// 正则表达式,匹配日期格式
$pattern = "/(\\d{2})\\/(\\d{2})\\/(\\d{4})/";

$text = "今年国庆节放假日期是10/01/2020到10/07/2020共7天,
              10/08/2020开始上班了。";

/*
  * 1.正则表达式的模式匹配与替换
  *
  * $\\{1}是正则表达式 $patern 的第一个“()”括号;
  * $\\{1} 等价于 \\\\1 ,但最好用前一种,因为后一种不便于字符串之间分隔;
  */
echo preg_replace($pattern, "\\${3}-\\${1}-\\${2}", $text);

echo "<hr><pre>";

/*
  * 2.正则表达式的匹配与搜索
  */
if(preg_match_all($pattern, $text, $matches, PREG_SET_ORDER)){
    print_r($matches);
}

echo "</pre><hr>";
echo "<br><b style=\'color:#000080\'>匹配到".count($matches)."处字符串。</b>";
echo "<br><b>分别是:</b>";

foreach($matches as $value){
    echo "<br>".$value[0];
}

 

执行后的效果:

 

<?php
/*
  * 在使用 preg_replace()函数时,有一个专门为它提供的模式修正符“e”(PHP 7已经弃用),
  * 也只有preg_replace()函数使用此修正符。
  * 在PHP 7中,preg_replace()函数不再支持“e”,需要使用preg_replace_callback()函数来代替。
  */
  
//$pattern = "/(<\\/?)(\\w+)([^>]*>)/e";
$pattern = "/(<\\/?)(\\w+)([^>]*>)/";

$text = "这个文本中有<b>粗体</b>和<u>带有下划线</u>以下<i>斜体</i>还
              有<font color=\'red\' size=\'8\'>带有颜色和字体大小</font>的标记。";
              
//echo preg_replace($pattern, "\'\\\\1\' . strtoupper(\'\\\\2\') . \'\\\\3\'", $text);
echo preg_replace_callback($pattern, function($r){
            return $r[1].strtoupper($r[2]).$r[3];
        }, $text);

执行后的效果:

以上是关于php正则表达式的匹配与替换的主要内容,如果未能解决你的问题,请参考以下文章

PHP 正则表达式匹配 img ,PHP 正则提取或替换图片 img 标记中的任意属性。

来自 Postgres 正则表达式替换 PHP 语言中的匹配

php正则表达式

前端学PHP之正则表达式函数

PHP正则匹配替换图片地址

PHP 正则