我尝试过的(仅限cpp的静态)=>
$str1 = "<pre class="brush:cpp">";
$temp = preg_replace('/<pre\s+class="brush:cpp">/','<pre class="brush:cpp">',$str1);
echo $temp . "\n";
那输出=&gt;
<pre class="brush:cpp">
但是$ str1可以是
"<pre class="brush:cpp">"
"<pre class="brush:java">"
"<pre class="brush:php">"
"<pre class="brush:python">"
对于那些输出应该是=&gt;
<pre class="brush:cpp">
<pre class="brush:java">
<pre class="brush:php">
<pre class="brush:python">
注意:我不能使用html_entity_decode,因为文本将包含其他普通字符串和<br>
<br/>
,我不想为所有文本执行html_entity_decode。
我需要一个通用的正则表达式来捕获cpp / java / php / python。如何编写通用正则表达式来保存模式的那一部分,并将其保留在替换字符串中。
答案 0 :(得分:2)
我相信这样的事情会起作用:
preg_replace('/<pre\s+class="brush:(cpp|java|php|python)">/','<pre class="brush:$1">',$str1);
它使用捕获组来捕获哪个结尾,它可以是cpp / java / php / python之一。替换是使用反向引用#1进行的,它将放置捕获的结尾。
这是an example。
答案 1 :(得分:1)
使用
preg_replace('/<pre\s+class="brush:(.*?)">/',
'<pre class="brush:$1">',
$str1);