preg_replace不按我的意料行事

时间:2010-12-21 09:27:01

标签: php

我在一段文字中有以下图例,我需要用任何内容替换它,以便它从段落中消失。

发送包含CONSULTANTS [45416,2010-05-11]我需要删除[]以及[]中的所有内容,而不是[]中的字符可以是任何内容

我尝试了以下但这只删除了[]

$par = preg_replace('/[\[*\]]/','',$par);

2 个答案:

答案 0 :(得分:6)

你可以这样做:

$par = preg_replace('/\[.*?\]/s','',$par);

说明:

/    - Start delimiter
\[   - A literal [
.*?  - A non-greedy anything
\]   - A literal ]
/    - End delimiter
s    - Modifier to make . match even a newline

使替换速度提高一点:

$par = preg_replace('/\[[^\]]*\]/s','',$par);

说明:

/    - Start delimiter
\[   - A literal [
 [   - Start of character class
 ^   - Char class negator
 ]   - End of character class
\]   - A literal ]
/    - End delimiter

答案 1 :(得分:2)

罗兰,

您要匹配的是:

[\[*\]]

这是'[','*',']'字符中的任何一个。你真正想要的是一个以'['开头并以']结尾的模式。中间可以有任何非']'字符。所以正确的模式是:

\[[^\]]*\]

所以这个:

$par = preg_replace("/\[[^\]]*\]/", "", $par);

应该有用。

感谢。