PHP移除字符串超链接文本的正则表达式

由于N久之前做了一些非常不好的动作导致网站内容页面有一些垃圾数据,今天早上整了一个移除字符串超链接文本方法,下面我结合正则来处理。

下面实例的功能是过滤所有的html标签,并替换h1-h5之前的所有文字,代码如下:

  1. for( $i=1;$i<=5;$i++ )
  2. {
  3. $sql ="SELECT * FROM `表名` WHERE `字段` like '<h".$i.">%</h".$i.">%' ";
  4. $query = mysql_query( $sql ) or die(mysql_error());
  5. if( mysql_num_rows( $query ) )
  6. {
  7. while ( $rs = mysql_fetch_array( $query ) )
  8. {
  9. //print_r($rs);
  10. $t = stripslashes($rs['字段']);
  11. $str = nl2br(strip_tags(addslashes(removelink($t))));
  12. $sql ="update 表名 set 字段='$str' where id'];
  13. if( mysql_query($sql))
  14. {
  15. echo $rs['id'].'成功<br />';
  16. }
  17. else
  18. {
  19. echo mysql_error();
  20. }
  21. }
  22. }
  23. else
  24. {
  25. echo '己更新过没有记录了'.$sql.'<br />';
  26. }
  27. }
  28. function removelink($t)
  29. {
  30. //$str = preg_replace("/<a[^>]*href=[^>]*>|</[^a]*a[^>]*>/i","",$t);
  31. $str = preg_replace("/(?is)(?<=<h1>).*?(?=</h1>)/i","",$t);
  32. $str = preg_replace("/(?is)(?<=<h2>).*?(?=</h2>)/i","",$str);
  33. $str = preg_replace("/(?is)(?<=<h3>).*?(?=</h3>)/i","",$str);
  34. $str = preg_replace("/(?is)(?<=<h4>).*?(?=</h4>)/i","",$str);
  35. $str = preg_replace("/(?is)(?<=<h5>).*?(?=</h5>)/i","",$str);
  36. return re_h($str);
  37. }
  38. function re_h($str)
  39. {
  40. $str = str_replace('<h1>','',$str);
  41. $str = str_replace('<h2>','',$str);
  42. $str = str_replace('<h3>','',$str);
  43. $str = str_replace('<h4>','',$str);
  44. $str = str_replace('<h5>','',$str);
  45. $str = str_replace('</h1>','',$str);
  46. $str = str_replace('</h2>','',$str);
  47. $str = str_replace('</h3>','',$str);
  48. $str = str_replace('</h4>','',$str);
  49. $str = str_replace('</h5>','',$str);
  50. return $str;
  51. }

上面用到了下面的正则表达式,代码如下:

preg_replace("/(?is)(?<=<h1>).*?(?=</h1>)/i","",$t);

这就是核心代码了,比如需要将文本中的超链接内容去除,这个时候就需要用到正则表达式了,比如你可以用$str = preg_replace("/<a[^>]*href=[^>]*>|</[^a]*a[^>]*>/i","",$strhtml); 这段来实现需求,如果想要更多解决方法,可以参看以下的。

1、删除内容中的超链接,代码如下:

  1. ereg_replace('<a([^>]*)>([^<]*)</a>','<font color="red">\2</font>',$content);
  2. ereg_replace("<a [^>]*>|</a>","",$content);

2、消除包含特定词的超链接,代码如下:

  1. $find="this string is my find";
  2. $string='<font color="red">替换掉了</font>';//将超链接替换成的内容
  3. echo ereg_replace('<a([^>]*)>([^<]*'.$find.'[^>]*)</a>','<font color="red">\2</font>',$content);