我在段落文本中有以下patern,我需要用nothing替换它,以便它从段落中消失。preg_replace没有做我期望的
的sendtence包含CONSULTANTS [45416,2010-05-11]
我需要删除[]和中的[]这些[],而不是字符内的所有内容可以是任何东西
我试过以下,但这只删除[]
$par = preg_replace('/[\[*\]]/','',$par);
我在段落文本中有以下patern,我需要用nothing替换它,以便它从段落中消失。preg_replace没有做我期望的
的sendtence包含CONSULTANTS [45416,2010-05-11]
我需要删除[]和中的[]这些[],而不是字符内的所有内容可以是任何东西
我试过以下,但这只删除[]
$par = preg_replace('/[\[*\]]/','',$par);
你可以这样做:
$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
罗兰,
你正在尝试匹配的是:
[\[*\]]
这是任何'[','*',']'字符。你真正想要的是一个以'['开始并以']'结尾的模式。之间可以有任何非''''字符。所以,正确的模式应该是:
\[[^\]]*\]
所以这个:
$par = preg_replace("/\[[^\]]*\]/", "", $par);
应该工作。
谢谢。
试图匹配[45416,2010-05-11] – Roland 2010-12-21 10:16:49
你的解释如此清晰彻底,几乎让我哭了。 – cbrandolino 2010-12-21 09:56:24