Preg_replace特殊字符

时间:2011-04-03 11:24:53

标签: php regex

您好我想删除此字符:|使用php preg replace。 我的代码不起作用

$rstr = '|||is';
$Grab->text = preg_replace($rstr,'',$Grab->text);
echo $Grab->text;

3 个答案:

答案 0 :(得分:3)

如果你真的想要使用正则表达式,你需要转义|字符,special meaning

$Grab->text = preg_replace('#\|#is', '', $Grab->text);

这假设您只想替换一个|,而不是连续三个 - 在这种情况下您将使用:

$Grab->text = preg_replace('#\|{3}#is', '', $Grab->text);

另请注意,我使用#作为delimiters - 当分隔符不是正则表达式中存在的字符时,更容易编写/读取正则表达式:更少逃避。


但是,正如 @Pekka 在对您的问题的评论中指出的那样,为什么不使用str_replace()

$Grab->text = str_replace('|', '', $Grab->text);

或者,如果您只想在有三个|时进行替换:

$Grab->text = str_replace('|||', '', $Grab->text);

毕竟,在这样的简单情况下,不需要正则表达式。

答案 1 :(得分:2)

|是一个正则表达式元字符,你也用它作为分隔符(这是2个问题)。 您应该转义|符号,并使用其他分隔符(您也不需要is标记):

$rstr = '~\|~';

你的正则表达式是~~|is,并出现以下错误消息:

Warning: preg_replace(): Unknown modifier '|' in /home/o3oYmU/prog.php on line 3

答案 2 :(得分:0)

|在正则表达式中有特殊含义,它用于交替(即a|b|c表示a或b或c)所以你必须逃避它:

$Grab->text = preg_replace("/\|\|\|is/",'',$Grab->text);
如果您指定字符串$rstr = '\\|\\|\\|is';

,请

或双重转义