正则表达式去除HMTL标签实例详解

前端之家收集整理的这篇文章主要介绍了正则表达式去除HMTL标签实例详解前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

需求:在将一个字符串写入数据库的过程中,我们常常面对一个问题:字符串中含有html标签,比如:换行<br>,空格&nbsp,等其他html标签(a,p,div)等,我们最好能够从前台传入的字符串中,将这些字符过滤掉,再存入数据库

正则表达式

/<([a-z]+)([^<>]+)*(>(.*)<\/\\1>|\/>)/

正则表达式详解

< //匹配标签开始 ([a-z]+) // 子模式① : 匹配 标签名,+ 代表 >=1,至少一个

([^<>\/]+)*  //子模式②: 匹配 属性值;
*标识可以有多个属性 ; []原子集说明该属性中不能含有< 和 >

(>(.*)<\/\\1>|\/>)  
// 子模式③: 匹配结束标签 如: >PHP</a>,/>,
// 此处注意,或 | 元字符表明 结束标签.
//有两种匹配方式,分别为成对标签<span><span>,或者直接关闭标签<input type="text"/>

(.*)    // 子模式③ 中的子模式,子模式④ : 匹配标签内容,
//比如 PHP<span><br><span> 中的<br>

替换Html标签实例

下面,我将写一个正则替换html标签的实例,详情解释已写在注释中

$str = "<a href='www.baidu.com'>PHP</a>C#,精神病人思路广&nbsp <span><br></span>&nbsp<br/> &nbsp<a href='#' target='_blank'/>&nbsp房天下<br>国际网组";   

    $reg = "/<([a-z]+)([^<>]+)*(>(.*)<\/\\1>|\/>)/";
    //这是我优化之后的正则表达式,可以 匹配 成对的标签和非常对的标签
    比如:<html>hello</hello>,<a href="#",target="_blank"/>

    $str1 = "&nbsp<br>";//匹配空格 和换行
    $reg1 = "/(&nbsp)|(<br>)/";

    if (preg_match_all($reg,$str,$arr,@H_502_116@2)){
        var_dump($arr);
    }
    $newstr = preg_replace([$reg,$reg1],["\$4",""],$str);//正则替换函数
    echo $newstr;


    // preg_replace 正则替换函数
    /*  @pattern : 匹配模式,可以为单个匹配,也可以为数组  @replacement:替换后 的内容,可以为数组,若为数组 ,将与前面的匹配模式对应替换  @subject : 源内容,要替换的字符串 */



    //下面的函数没啥用,方便查看是如何进行替换的。
    //可以分别看一下一下,$reg1,$reg2,$reg3对 $str1,$str2,$str3 的处理

    if (preg_match_all($reg1,@H_502_116@2)){
        echo "<pre>";
        var_dump($arr);//打印匹配详情
        echo "</pre>";
    }
    //preg_match_all 正则匹配函数
    /*  @parttern: 匹配模式  @replacement : 替换后的内容  @match: 匹配后的结果,数组。 */

运行结果(替换结果):

PHPC#,精神病人思路广  房天下国际网组

正则匹配详情

array(@H_502_116@4) {
  [@H_502_116@0]=>
  array(@H_502_116@5) {
    [@H_502_116@0]=>
    string(@H_502_116@38) "<a href='www.baidu.com/search'>PHP</a>"//匹配结果
    [@H_502_116@1]=>
    string(@H_502_116@1) "a"//子模式①,匹配标签
    [@H_502_116@2]=>
    string(@H_502_116@28) " href='www.baidu.com/search'"//子模式②,匹配标签属性
    [@H_502_116@3]=>
    string(@H_502_116@8) ">PHP</a>"//子模式③,匹配结束标签 
    [@H_502_116@4]=>
    string(@H_502_116@3) "PHP"  //子模式④,匹配标签内容(成对标签的前提下)
  }
  [@H_502_116@1]=>
  array(@H_502_116@5) {
    [@H_502_116@0]=>
    string(@H_502_116@17) "<span><br></span>"
    [@H_502_116@1]=>
    string(@H_502_116@4) "span"
    [@H_502_116@2]=>
    string(@H_502_116@0) ""
    [@H_502_116@3]=>
    string(@H_502_116@12) "><br></span>"
    [@H_502_116@4]=>
    string(@H_502_116@4) "<br>"
  }
  [@H_502_116@2]=>
  array(@H_502_116@4) {
    [@H_502_116@0]=>
    string(@H_502_116@5) "<br/>"
    [@H_502_116@1]=>
    string(@H_502_116@2) "br"
    [@H_502_116@2]=>
    string(@H_502_116@0) ""
    [@H_502_116@3]=>
    string(@H_502_116@2) "/>"
  }
  [@H_502_116@3]=>
  array(@H_502_116@4) {
    [@H_502_116@0]=>
    string(@H_502_116@29) "<a href='#' target='_blank'/>"
    [@H_502_116@1]=>
    string(@H_502_116@1) "a"
    [@H_502_116@2]=>
    string(@H_502_116@25) " href='#' target='_blank'"
    [@H_502_116@3]=>
    string(@H_502_116@2) "/>"
  }
}

猜你在找的正则表达式相关文章