正则表达式去除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,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,$str,$arr,2)){
        echo "<pre>";
        var_dump($arr);//打印匹配详情
        echo "</pre>";
    }
    //preg_match_all 正则匹配函数
    /*
    @parttern: 匹配模式
    @replacement : 替换后的内容
    @match: 匹配后的结果,数组。
    */

运行结果(替换结果):

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

正则匹配详情

array(4) {
  [0]=>
  array(5) {
    [0]=>
    string(38) "<a href='www.baidu.com/search'>PHP</a>"//匹配结果
    [1]=>
    string(1) "a"//子模式①,匹配标签名
    [2]=>
    string(28) " href='www.baidu.com/search'"//子模式②,匹配标签属性
    [3]=>
    string(8) ">PHP</a>"//子模式③,匹配结束标签 
    [4]=>
    string(3) "PHP"  //子模式④,匹配标签内容(成对标签的前提下)
  }
  [1]=>
  array(5) {
    [0]=>
    string(17) "<span><br></span>"
    [1]=>
    string(4) "span"
    [2]=>
    string(0) ""
    [3]=>
    string(12) "><br></span>"
    [4]=>
    string(4) "<br>"
  }
  [2]=>
  array(4) {
    [0]=>
    string(5) "<br/>"
    [1]=>
    string(2) "br"
    [2]=>
    string(0) ""
    [3]=>
    string(2) "/>"
  }
  [3]=>
  array(4) {
    [0]=>
    string(29) "<a href='#' target='_blank'/>"
    [1]=>
    string(1) "a"
    [2]=>
    string(25) " href='#' target='_blank'"
    [3]=>
    string(2) "/>"
  }
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值