Preg_replace问题(PHP)

时间:2011-05-06 16:27:01

标签: php preg-replace

我真的需要preg_replace的帮助。见下文:

<html>[sourcecode language='php']<?php echo "hello world"; ?>[/sourcecode]</html>

我只希望它显示PHP标签并剥离其余部分,所以我会得到以下结果:

<?php echo "hello world"; ?>

请帮忙。我尝试过以下方法:

$update = get_the_content(); 

$patterns = array();
$patterns[0] = '/<html>/';
$patterns[1] = '/</html>/';
$patterns[2] = '/[sourcecode language]/';
$patterns[3] = '/[/sourcecode]/';
$replacements = array();
$replacements[0] = '';
$replacements[1] = '';
$replacements[2] = '';
$replacements[3] = '';

echo preg_replace($patterns, $replacements, $update);

但它不起作用。我的问题还在于语言可能并不总是PHP。

3 个答案:

答案 0 :(得分:1)

当使用/作为分隔符和[]时,你需要转义像/一样的字符,因为它们在正则表达式中有用:

$update = get_the_content(); 

$patterns = array();
$patterns[0] = '/<html>/';
$patterns[1] = '/<\/html>/';
$patterns[2] = '/\[sourcecode language\]/';
$patterns[3] = '/\[\/sourcecode\]/';
$replacements = array();
$replacements[0] = '';
$replacements[1] = '';
$replacements[2] = '';
$replacements[3] = '';

echo preg_replace($patterns, $replacements, $update);

答案 1 :(得分:0)

逃离方括号。在正则表达式中,[]是指示字符类的标记,并且该模式与括号内的任何一个字符匹配。

答案 2 :(得分:0)

为什么不采用不同的方法:

获取所有php标签和内容

$src = get_the_content();
$matches = array();
preg_match_all('/(<\?php(?:.*)\?>)/i',$src,$matches);
echo implode("\n",$matches);

或获取[sourcecode]块的所有内容

$src = get_the_content();
$matches = array();
preg_match_all('/\[sourcecode[^\]]*\](.*)\[\/sourcecode\]/i',$src,$matches);
echo implode("\n",$matches);