uGain(幽亙)的写法不对的. 这个最好将"否"提出来, 然后写成如下形式:<?
if (!preg_match ("/[\"\'\>]|\bstring\b/i", "abcdefg")) {
    print "YES";
} else {
    print "NO";
}
?>期待qswang的解答.

解决方案 »

  1.   

    uGain(幽亙)的写法我试过,它会把string拆分为每一个字符。我的应用中不能只将“否”提出来。应用大致内容:
    qwe<a href="文件" string>ddslsdl</a>abc
    将以上内容中的文件进行一个函数运算(比如:rawurlencode)后,再将运算后的内容替换回去。由于不能使用rawurlencode("\\2"),不能直接引用匹配匹配,只能先匹配再替换。
    匹配规则为:"(<[^>]*(href|src)=\"([^\"'>]+)\"[^>]*>)"
    但这里匹配替换后的内容还是能符合匹配规则,所以,需要在下一次匹配时,不能包含已经匹配替换过的内容。我现在准备的解决思路是:先循环匹配,利用匹配内容分割数据内容,对分割后的内容在匹配分割。最后重新组合。
      

  2.   

    //$try你要匹配的串
    //换个思路,满足你提出条件的是不符合的,排除法if  (preg_match("/^\w*[<'\"]\w*$|^.*string.*$/",$try) )
    {    print "Wrong expression!";
        
    }else {echo "It is match!";}
      

  3.   

    用while(fgets($filehandle,255))
    {
    }
    循环,对每一行用上面的正则式处理判断处理就行了。或者,把你的代码贴上来。
      

  4.   

    可能和楼主的意思不同:
    <?
    $patt="/(<[^>]*(href|src)=\")([^\"'>]+)(\" string>)/";
    $str='qwe<a href="sdfstring" string>ddslsdl</a>abc';
    echo "<xmp>";echo preg_replace($patt,"\\1".rawurlencode("\\3")."\\4",$str);
    ?>
      

  5.   

    vivanboy的写法应该是可以的.
    我用了另一个函数, 写得麻烦了点:
    <?function convert($preg)
    {
      return $preg[1].rawurlencode($preg[2]).$preg[3];;
    }$test = "qwe<a href=\"二文件\">ddslsdl</a>adfad<a href='一文件'>ddslsdl</a>abc";$test = preg_replace_callback ("/(href=[\"\'])(\S*)([\"\'])/i", convert , $test);echo "<xmp>".$test;
    ?>
      

  6.   

    忽略了一般情况下\\n只能作为连接字符串,作为参数没效果,昨天没来得及说不过可以加上修饰符e达到目的$str='qwe<a href="sdfstdring國家" string>ddslsdl</a>abc';
    echo "<xmp>";
    $pat="/(<[^>]*(href|src)=\")([^\"'>]+)(\" string>)/e";//加上e
    echo preg_replace($pat,"'\\1'.rawurlencode('\\3').'\\4'",$str);
      

  7.   

    vivanboy 比较符合我的意思,但还有一点区别,也是最根本的区别是:
    string 指的是不能出现在链接的地址里,也就是说不能在href=""里出现,同时这里面也不能出现"'>等字符。使用排除法是可以的,但我要进行将符合条件的进行循环运算。使用排除法无法进行循环。谢谢大家的帮助,希望能再帮俺想想办法。