为了剔除文本中的html 标记,通常大家都会使用下面的正则表达式:
/<.*?>/s
在大部分情况下该表达式都能正常运行,但在某些情况下却会出现差错,例如当html 标记含有带 '>' 符号的script 脚本时,如:
<img src='images/1109669135478.jpeg' onload='if(this.width>screen.width-500){this.width=screen.width-500;}' border=0>
此时上面的正则表达式只能匹配到
<img src='images/1109669135478.jpeg' onload='if(this.width>
而无法匹配整个img 标记,这时综合使用下面的几个正则表达式就可以解决问题了:
1. /<!--.*?-->/s
2. /<([^>]*?('.*?'|".*?")[^>]*?)*?>/s
3. /<.*?>/s
说明:
1. 首先剔除注释标记,这样可以同时剔除掉注释中可能包含的其他html 标记
2. 剔除含属性声明的html 标记,这样可以剔除上面所提到的在属性中出现的'>'
3. 剔除不含属性声明的html 标记