Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Preg替换特殊字符_Php_Regex - Fatal编程技术网

Php Preg替换特殊字符

Php Preg替换特殊字符,php,regex,Php,Regex,您好,我想用php preg replace删除此字符:|。 我的代码不起作用 $rstr = '|||is'; $Grab->text = preg_replace($rstr,'',$Grab->text); echo $Grab->text; |在正则表达式中有特殊的含义,它用于交替(即a | b | c表示a、b或c),因此必须对其进行转义: $Grab->text = preg_replace("/\|\|\|is/",'',$Grab->text);

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

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

|
在正则表达式中有特殊的含义,它用于交替(即
a | b | c
表示a、b或c),因此必须对其进行转义:

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

或者,如果您分配字符串
$rstr='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

在正则表达式中有特殊含义,它用于替换(即
a | b | c
表示a、b或c),因此您必须对其进行转义:

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

或者,如果您分配字符串
$rstr='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

|
是一个正则表达式元字符,您还可以将其用作分隔符(这是两个问题)。 您应该转义
|
符号,并使用另一个分隔符(您也不需要
i
s
标志):

您的正则表达式被解释为
~~| is
,并显示以下错误消息:

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

|
是一个regex元字符,您还可以将其用作分隔符(这是两个问题)。 您应该转义
|
符号,并使用另一个分隔符(您也不需要
i
s
标志):

您的正则表达式被解释为
~~| is
,并显示以下错误消息:

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

如果确实需要使用正则表达式,则需要转义
字符,该字符作为:

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

$Grab->text = preg_replace('#\|{3}#is', '', $Grab->text);
还请注意,我使用了
#
作为--当分隔符不是正则表达式中的字符时,编写/读取正则表达式更容易:更少的转义操作


但是,正如@Pekka在对您的问题的评论中所指出的,为什么不直接使用

或者,如果您只希望在有三个
|
时进行更换:

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

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

如果真的需要使用正则表达式,则需要转义
字符,该字符作为:

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

$Grab->text = preg_replace('#\|{3}#is', '', $Grab->text);
还请注意,我使用了
#
作为--当分隔符不是正则表达式中的字符时,编写/读取正则表达式更容易:更少的转义操作


但是,正如@Pekka在对您的问题的评论中所指出的,为什么不直接使用

或者,如果您只希望在有三个
|
时进行更换:

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

毕竟,在这样一个简单的例子中,不需要正则表达式。

为什么不使用
str\u replace(“|“,”,$Grab->text)?“不工作”如何?错误消息?什么都不做?我有很多要解析的
$rstr
。我不
str_替换(“|”、”、$Grab->text)因为它对我的脚本不起作用。为什么不使用
str_replace(“|“,”,$Grab->text)?“不工作”如何?错误消息?什么都不做?我有很多要解析的
$rstr
。我不
str_替换(“|”、”、$Grab->text)因为它对我的脚本不起作用。+1-我不确定OP试图做什么,但这节省了我大量的输入。我已经添加了一个关于如何解释
| |
的解释。(哦,现在我得到了公认的答案。Phoi。)+1-我不确定OP想要做什么,但这节省了我大量的打字。我已经添加了一个关于如何解释
| |
的解释。(哦,现在我得到了被接受的答案。Phoi。)@User-事实上,这远不是完美的
:)
-如果适用,请尝试
str\u replace
函数。@User-事实上,这远不是完美的
:)
-如果适用,请尝试
str\u replace
函数。