$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其中[^>]*?>.*? 代表什么啊,我读晕头转向的,帮忙

解决方案 »

  1.   

    [^>]代表非>的任意单个字符
    *?>.*? 
    [^>]*?代表script和第一个>之间的字符,?代表非贪婪匹配
    >后面的.*?代表两个<script>标签之间的任意字符 <script[^>]*?>.*?</script>代表所有包含在<script>标签内的全部信息。
      

  2.   

    "'<[\/\!]*?[^<>]*?>'si",   感谢楼上,还有这个也请教一下SI是什么意思,,我不懂了,<[\/\!]*?意思是以<开头后面跟着/或!并且后面可以是*?,这个我能理解,[^<>]*?>但这个我不太理解了,取不是<>的字符,后面为什么还要跟 着*?呢,他的意思不就是</....>或<!.....>吗?为什么要有二个*?
      

  3.   

    i
    不区分大小写的匹配s
    使句点(.)匹配任何字符,包括换行符(\n)[^<>]*?在这里时强调的不能包含<>的作用。*代表0到多次匹配,[^<>]*?有可能为空,如果不包含*?,[^<>]就是匹配一个单个字符了,就可能出现匹配错误。
      

  4.   

    jinjuduo() 我没有理解啊
    "'<[\/\!]*?[^<>]*?>'si"中的<[\/\!]*?意思是不是:
    以<开头后面跟着/或!后面跟着*?  *?代表任何字符,并且允许是*=0到无限 ?=0到1对吗
      

  5.   

    jinjuduo():<[\/\!]*?中的*?意思是不是/或!允许为多个?
      

  6.   

    不是,你开始的理解是正确的,我是说如果去掉<[\/\!]*?[^<>]*?>中后面的*?变成
    <[\/\!]*?[^<>]>这样,那么[^<>]就变成必须匹配一个单个字符了。就可能出现匹配错误。但是[^<>]*?代表不包含<>的任意多个字符
    [\/\!]*?表示以[\/\!]开头的任意字符的非贪婪匹配
      

  7.   

    ?代表非贪婪匹配,不是原来的0-1的意思了
    就是说从前往后匹配遇到>就匹配成功。
    如果不加?就是从末尾开始往回寻早,当最早出现>的时候就匹配成功了。但是这不是我们需要的
    如<script[^>]*>(去掉这里的?)试试,出现什么结果。