我想改变
<lang class='brush:xhtml'>test</lang>
到
<pre class='brush:xhtml'>test</pre>
我的代码就是这样。
<?php
$content="<lang class='brush:xhtml'>test</lang>";
$pattern=array();
$replace=array();
$pattern[0]="/<lang class=([A-Za-z='\":])* </";
$replace[0]="<pre $1>";
$pattern[1]="/<lang>/";
$replace[1]="</pre>";
echo preg_replace($pattern, $replace,$content);
?>
但它不起作用。如何更改代码中的代码或错误?
答案 0 :(得分:4)
有很多问题:
*
,因此该组仅匹配一个字符class=
,替换也没有,因此替换后的字符串中不会有class=
lang
而不是/lang
这将有效:
$pattern[0]="/<lang (class=[A-Za-z='\":]*) ?>/";
$replace[0]="<pre $1>";
$pattern[1]="/<\/lang>/";
$replace[1]="</pre>";
答案 1 :(得分:2)
没有正则表达式怎么回事? :)
<?php
$content="<lang class='brush:xhtml'>test</lang>";
$content = html_entity_decode($content);
$content = str_replace('lang','pre',$content);
echo $content;
?>
答案 2 :(得分:1)
使用preg_replace比str_replace快得多。
$str = preg_replace("/<lang class=([A-Za-z'\":]+)>(.*?)<\/lang>/", "<pre class=$1>$2</pre>", $str);
Execution time: 0.039815s [preg_replace] Time: 0.009518s (23.9%) [str_replace] Time: 0.030297s (76.1%) Test Comparison: [preg_replace] compared with.........str_replace 218.31% faster
因此preg_replace比上面提到的218.31%
方法快str_replace
。每次测试1000次。