需求:在将一个字符串写入数据库的过程中,我们常常面对一个问题:字符串中含有html标签,比如:换行<br>
,空格 
,等其他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#,精神病人思路广  <span><br></span> <br/>  <a href='#' target='_blank'/> 房天下<br>国际网组";
$reg = "/<([a-z]+)([^<>]+)*(>(.*)<\/\\1>|\/>)/";
//这是我优化之后的正则表达式,可以 匹配 成对的标签和非常对的标签
比如:<html>hello</hello>,<a href="#",target="_blank"/>
$str1 = " <br>";//匹配空格 和换行
$reg1 = "/( )|(<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,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) "/>"
}
}