preg_replace('/<[^<>]*>/s', '#', $str);
preg_replace('/#( |#)+/s', '#', $str);
球大侠帮我仔细解释下这个正则?

解决方案 »

  1.   

    第一個將<>中間的字符替換成#
    第二個將#後面的都替換成#
      

  2.   

    结果我是知道的 只是想知道为什么这么写?
    比如/<[^<>]*>/s,写成/<.*>/s不一样吗?为什么要第一种写法?
    中括号[^<>]里面字符到底什么意思?
    高人指点下啊?
      

  3.   

    比如/<[^<>]*>/s,写成/<.*>/s不一样吗?为什么要第一种写法?
    /<[^<>]*>/s       “[]”中的字符出现次数不限
    /<.*>/s           可以出现任何字符并不限次数
      

  4.   

    就像in差不多,[abc]那么出现的要是a或b或c,相当于(a|b|c)
      

  5.   

    /<[^<>]*>/s 的意思是:从“<”开始匹配任意字符0个或多个但不包括“<”和“>”直到“>”结束
    /<.*>/s 是贪婪模式。例如:<a href="xxx"><img src="xxx"></a> 将会从"<a"一直匹配到“</a>”
    而不是上面的规则所匹配的结果<a href="xxx">
    如果你一定要用自己的方式,可以这样改:/<.*?>/s (加个问号,变非贪婪模式即可)/#( |#)+/s  的意思是:#后面跟一个或多个空格  或 :#后面跟一个或多个#  
    这个正则还可以这样表达:/#(\s|#)+/s 或者 /#[\s|#]+/s 或者 /#[\s#]+/s 或者 /#[\s#]{1,}/s “\s”表示空格或空行