我真的需要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。
答案 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);