$search = array ("'<script[^>]*?>.*?</script>'si", // 去掉 javascript
"'<[\/\!]*?[^<>]*?>'si", // 去掉 HTML 标记
"'([\r\n])[\s]+'", // 去掉空白字符
"'&(quot|#34);'i", // 替换 HTML 实体
"'&(amp|#38);'i",
"'&(lt|#60);'i",
"'&(gt|#62);'i",
"'&(nbsp|#160);'i",
"'&(iexcl|#161);'i",
"'&(cent|#162);'i",
"'&(pound|#163);'i",
"'&(copy|#169);'i",
"'&#(\d+);'e"); -------------------------------------
'<script[^>]*?>.*?</script>'si其中[^>]*?>.*? 代表什么啊,我读晕头转向的,帮忙
*?>.*?
[^>]*?代表script和第一个>之间的字符,?代表非贪婪匹配
>后面的.*?代表两个<script>标签之间的任意字符 <script[^>]*?>.*?</script>代表所有包含在<script>标签内的全部信息。
不区分大小写的匹配s
使句点(.)匹配任何字符,包括换行符(\n)[^<>]*?在这里时强调的不能包含<>的作用。*代表0到多次匹配,[^<>]*?有可能为空,如果不包含*?,[^<>]就是匹配一个单个字符了,就可能出现匹配错误。
"'<[\/\!]*?[^<>]*?>'si"中的<[\/\!]*?意思是不是:
以<开头后面跟着/或!后面跟着*? *?代表任何字符,并且允许是*=0到无限 ?=0到1对吗
<[\/\!]*?[^<>]>这样,那么[^<>]就变成必须匹配一个单个字符了。就可能出现匹配错误。但是[^<>]*?代表不包含<>的任意多个字符
[\/\!]*?表示以[\/\!]开头的任意字符的非贪婪匹配
就是说从前往后匹配遇到>就匹配成功。
如果不加?就是从末尾开始往回寻早,当最早出现>的时候就匹配成功了。但是这不是我们需要的
如<script[^>]*>(去掉这里的?)试试,出现什么结果。