能帮忙解释\[\$ddd\]为什么不行吗?从语法上看,是没有问题的。

解决方案 »

  1.   

    [^\$|\$(?!ddd)]这个不正确,它会把任何[.*]的都拒绝。如[111]是我要的结果,只是不需要[$ddd]的结果。
      

  2.   

    我检查过,这个表达式,主要$出的问题,如果没有$是正确的。也就是说\[\$ddd\],其中的$该怎么匹配?
      

  3.   

    preg_match("#<a src=(['\"]?)(?!\[\\\$ddd\])(.+?)(\\1|\s).+?>#is",$s,$ar); 在双引号内要用\\\$。
      

  4.   

    这个我明白了。
    字符串里的\$ == \\ . \$
    其实相当两部分。那么字符串中如果有有' ",正则进行匹配的话,是不是也要这样呢?但这个:print preg_match("#\[\$\w+\]#is", "[\$ddd]");
    又不需要\\\$,是为什么?
      

  5.   

    preg_match("#\[\$\w+\]#is", "[\$ddd]");这句后面跟的是字母啊,怎么不用二次转义呢?
      

  6.   

    在双引号中,php会吧$与其后的变量字符当作变量做取值处理
    所以
    "$ddd" 得到的是$ddd的值

    "$\w+" 得到的依然是 $\w+,因为“\”不是变量字符在正则表达式中,字符“$”表示行结束,如果需要匹配字符“$”需写做“\$”注意:php首先将规则串当作普通的字符串处理,然后将结果传递给正则表达式函数为避免不必要的麻烦,同时也为了稍稍提高点速度:除有特殊需要,字符串都只用单引号括起
      

  7.   

    还是有些疑惑:
    $s = '<a src="[$ddd].gif">';
    preg_match("#<a src=(['\"])?(?![\[{]\$\w+[\]}])([^'\"<>]+\.gif)(\\1)>#is",$s,$ar);
    print_r( $ar );按:
    "$\w+" 得到的依然是 $\w+,因为“\”不是变量字符在正则表达式中,字符“$”表示行结束,如果需要匹配字符“$”需写做“\$”\$\w+  这就应该表示 $ddd 的字符了。但:
    以上结果还是不对的。还是需要\\\$\w+  才对。
      

  8.   

    不是和你说了吗,“为避免不必要的麻烦,同时也为了稍稍提高点速度:除有特殊需要,字符串都只用单引号括起”
    preg_match('#<a src=([\'"])?(?![\[{]\$\w+[\]}])([^\'"<>]+\.gif)(\\1)>#is',$s,$ar);
      

  9.   

    preg_match("#\[\$\w+\]#is", "[\$ddd]");
    $后面跟的是\w,\怎么是字母了……
      

  10.   

    我越来越迷糊。
    一、
    >>“为避免不必要的麻烦,同时也为了稍稍提高点速度:除有特殊需要,字符串都只用单引号括起”
    preg_match('#<a src=([\'"])?(?![\[{]\$\w+[\]}])([^\'"<>]+\.gif)(\\1)>#is',$s,$ar);
    这个我是试过的,使用'是正确的。
    那么在这里,不管是'还是",\$\w可以表示$ddd,这点是不是正确的,因为\不是变量字符。
    如果这点成立,那么这个表达式从理论上将是成立的。
    preg_match("#<a src=(['\"])?(?![\[{]\$\w+[\]}])([^'\"<>]+\.gif)(\\1)>#is",$s,$ar);二、
    >>preg_match("#\[\$\w+\]#is", "[\$ddd]");
    $后面跟的是\w,\怎么是字母了……这个意思,我明白了,谢谢。