这是官方解释:
preg_quote
(php 4, php 5, php 7)
preg_quote — 转义正则表达式特殊字符
说明:
string preg_quote ( string $str [, string $delimiter = null ] )
preg_quote()需要参数 str 并向其中 每个正则表达式语法中的字符前增加一个反斜线。 这通常用于你有一些运行时字符串 需要作为正则表达式进行匹配的时候。
正则表达式特殊字符有: . \ + * ? [ ^ ] $ ( ) { } = ! < > | : –
注意 / 不是正则表达式特殊字符。
preg_quote(‘a-d’, ‘/’); 错误返回: a-d
横线它并没有添加反斜杠转义啊,不是应该返回: a\-d 吗?
前面的a-d弄到正则中就表示a b c d 了,可是我只想要 a 字符- 和 d 啊,完全不一样啊,程序不就崩溃了?
还有它第二个参数说的是可以自定义同时添加自己需要转义的字符,但是我写
preg_quote(‘a-d/的’, ‘-/’); 返回结果符号/它并没有加反斜杠\, 它第二个参数当成是字符串啊,并不像
rtrim解释的那样当做每个字符来处理
发现这个php正是让人抓狂,为什么这么多人用这么成熟的语言还有这么多bug啊….
回复讨论(解决方案)
delimiter 分隔符
注意:是一个词,而不是字符列表
echo preg_quote(‘a-d’);// a\-d
echo preg_quote(‘a-d/的’, ‘/’); //a\-d\/的
echo preg_quote(‘a-d/的’, ‘的’); //a\-d/\的
因此,是你的理解问题,而不是 php 的 bug
当然,个别低版本中也可能会出现错误,但一定会在其后的版本中得到修正
delimiter 分隔符
注意:是一个词,而不是字符列表
echo preg_quote(‘a-d’);// a\-d
echo preg_quote(‘a-d/的’, ‘/’); //a\-d\/的
echo preg_quote(‘a-d/的’, ‘的’); //a\-d/\的
因此,是你的理解问题,而不是 php 的 bug
当然,个别低版本中也可能会出现错误,但一定会在其后的版本中得到修正
我是php5.2测试减号没有加反斜杠