重发:
今天碰到一个很别扭的问题,搞得很糊涂。用ereg函数匹配的问题我的PHP版本是 5.2.5。
$s='xyz]\hi[jk';  //待搜索字符串
$d='[]]';         //模式字符串
ereg(($d, $s, $c);上面的结果返回true,匹配字符是]  。(我也不知道是怎么匹配的)如果改成$d='[]\]'; 返回true,匹配字符还是 ] 。但如果写成$d='[\]]'; 返回false。
看网上的资料应该用转意字符\,但不管我写成$d='[\\]]';,还是写成$d='[\\\]]';,其结果都返回false。我用[:punct:]搜索可以匹配到字符],但如果按照书上写的,把[:punct:] 的扩展表达式[-!"#$%&'( )*+,./:;<=>?@[\\\]^_'{|}~]代到$d里,结果也是错?! 这到底怎么回事,书上写错了?书上还说[^\]]匹配任一不是右括号的字符,但 ereg("[^\]]","abcd") 返回false晕死,到底是书上错,还是我理解错,还是我php 有bug。请大家指教一下。谢谢!

解决方案 »

  1.   

    int ereg ( string $pattern, string $string [, array &$regs] )
    string ereg_replace ( string $pattern, string $replacement, string $string )应该用ereg_replace吧.
    \] \\\
      

  2.   


    没看明白,你最后一行 \] \\\ 是想说明怎么表示 ] 吗,我没看懂,能否详细些。
    作不作替换没关系,我不关心用replace,还是不用,就想知道为什么用\转义字符类[]中的字符],不起作用。和书上写得怎么不一样呢?
      

  3.   

    平时很少用posix的正则式,一般都用perl的正则式,posix正则式里,反斜杠'\'并不是一个特殊字符,这是个很关键的区别.
    参考一下:http://www.regular-expressions.info/posixbrackets.html