2010-12-21 20 views
1

我在段落文本中有以下patern,我需要用nothing替换它,以便它从段落中消失。preg_replace没有做我期望的

的sendtence包含CONSULTANTS [45416,2010-05-11]我需要删除[]和中的[]这些[],而不是字符内的所有内容可以是任何东西

我试过以下,但这只删除[]

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

回答

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 
+0

你的解释如此清晰彻底,几乎让我哭了。 – cbrandolino 2010-12-21 09:56:24

2

罗兰,

你正在尝试匹配的是:

[\[*\]] 

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

\[[^\]]*\] 

所以这个:

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

应该工作。

谢谢。

+0

试图匹配[45416,2010-05-11] – Roland 2010-12-21 10:16:49

相关问题