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