我需要去掉<p>
pre 标签内的标签,我该如何在 php 中做到这一点?我的代码将是这样的:
<pre class="brush:php;">
<p>Guna</p><p>Sekar</p>
</pre>
我需要标签内的文本<p>
,只需要删除<p>
</p>
标签。
我需要去掉<p>
pre 标签内的标签,我该如何在 php 中做到这一点?我的代码将是这样的:
<pre class="brush:php;">
<p>Guna</p><p>Sekar</p>
</pre>
我需要标签内的文本<p>
,只需要删除<p>
</p>
标签。
这可以用一个正则表达式来完成,这在 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>
剖析正则表达式:
您可以使用基本的正则表达式。
<?php
$str = <<<STR
<pre class="brush:php;">
<p>Guna</p><p>Sekar</p>
</pre>
STR;
echo preg_replace("/<[ ]*p( [^>]*)?>|<\/[ ]*p[ ]*>/i", " ", $str);
您可以使用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+
你可以试试下面的代码。它运行 2 个正则表达式命令来列出 <pre> 标签内的所有 <p> 标签。
preg_match('/<pre .*?>(.*?)<\/pre>/s', $string, $matches1);
preg_match_all('/<p>.*?<\/p>/', $matches1[1], $ptags);
匹配的 <p> 标签将在 $ptags 数组中可用。
这看起来很简单,但要花几个小时才能找到方法。这就是我所做的:
<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>
感谢您的所有建议。