匹配一段字符串,里面不能包含 abcdefg 字符串,请教怎么写!

解决方案 »

  1.   

    你好,这样是单个字符其实是想匹配这样一段东西,请看
    [div style=width:expression(alert(123))]百度1[/div]
    [div style=width:df]百度2[/div]
    [div style=width:expre/*ssion(alert(123))]百度3[/div]就是包含了expression或者/* 这样的就不匹配,中间的百度2可以匹配,请问怎么解决!
      

  2.   


    preg_match_all('#\[div\s*style=width:(?!expression|(?:.*)\/\*).+#im',$str,$arr);
    print_r($arr);试试
      

  3.   


    呵呵,可能是我理解错,又或者是你说得不够明白
    我也来一个$str = <<<EOS
    [div style=width:expression(alert(123))]百度1[/div]
    [div style=width:df]百度2[/div]
    [div style=width:expre/*ssion(alert(123))]百度3[/div]
    EOS;
    preg_match_all('#\[div\s*style=width:(?:[^(?:expression)|\\\*]).+#im',$str,$arr);
    print_r($arr);
    /*
    输出结果:
    Array ( [0] => Array ( [0] => [div style=width:df]百度2[/div] ) ) 
    */
      

  4.   

    恩,很感谢两位的回复,请教下 ?:是什么  ?!这个是顺序否定环视,也只是了解,不是很明白"/\[div (style|class)=(.*?)\]/i",这个是我最开始的那种匹配的,转成HTML的代码,现在的意思是,(.*?) 怎么修改可以不匹配出现expression或/*这个东西 谢谢
      

  5.   

    "/\[div\s+(style|class)=(?!expression|(?.*?))\]/i",  匹配不出!!
      

  6.   

    preg_replace(array(
    "/\[div\s+(style|class)=((?!expression).)*?\]/i",
    array(
    "<div \\1=\"\\2\">",恩 都测试过了,不知道哪个小地方的问题,其实就是做个UBB转HTML!
    大侠帮我看下,谢谢!!