我需要删除pre标签内的<p>
标签,我该如何在php中执行此操作?我的代码将是这样的:
<pre class="brush:php;">
<p>Guna</p><p>Sekar</p>
</pre>
我需要<p>
个代码中的文字,只需删除<p>
</p>
代码。
答案 0 :(得分:0)
您可以使用基本的Regexp。
<?php
$str = <<<STR
<pre class="brush:php;">
<p>Guna</p><p>Sekar</p>
</pre>
STR;
echo preg_replace("/<[ ]*p( [^>]*)?>|<\/[ ]*p[ ]*>/i", " ", $str);
答案 1 :(得分:0)
您可以尝试以下代码。它运行2个正则表达式命令来列出所有&lt; p&gt;标签内&lt; pre&gt;标签
preg_match('/<pre .*?>(.*?)<\/pre>/s', $string, $matches1);
preg_match_all('/<p>.*?<\/p>/', $matches1[1], $ptags);
匹配&lt; p&gt;标签将以$ ptags数组的形式提供。
答案 2 :(得分:0)
您可以使用preg_replace_callback()来匹配<pre>
标记中的所有内容,然后使用strip_tags()删除所有html标记:
$html = '<pre class="brush:php;">
<p>Guna</p><p>Sekar</p>
</pre>
';
$removed_tags = preg_replace_callback('#(<pre[^>]*>)(.+?)(</pre>)#is', function($m){
return($m[1].strip_tags($m[2]).$m[3]);
}, $html);
var_dump($removed_tags);
请注意,这仅适用于PHP 5.3 +
答案 3 :(得分:0)
这可以通过一个正则表达式完成,这是在powershell中测试的,但是应该适用于支持环顾四周的大多数正则表达式
$string = '<pre class="brush:php;"><p>Guna</p><p>Sekar</p></pre><pre class="brush:php;"><p>Point</p><p>Miner</p></pre>'
$String -replace '(?<=<pre.*?>[^>]*?)(?!</pre)(<p>|</p>)(?=.*?</pre)', ""
产量
<pre class="brush:php;">GunaSekar</pre><pre class="brush:php;">PointMiner</pre>
解析正则表达式:
答案 4 :(得分:0)
看起来很简单,但需要几个小时才能找到方法。这就是我所做的:
<pre>
代码并删除<p>
代码<pre>
代码以下是完整代码:
include_once 'simple_html_dom.php';
$text='<pre class="brush:php;"><p>Guna</p><p>Sekar</p></pre>';
$html = str_get_html($text);
$strip_chars=array('<p>','</p>');
foreach($html->find('pre') as $element){
$code = $element->getAttribute('innertext');
$code=str_replace($strip_chars,'',$code);
$element->setAttribute('innertext',$code);
}
echo $html->root->innertext();
这将输出:
<pre class="brush:php;">GunaSekar</pre>
感谢你的所有建议。