长文本中有字符串:
<fn id="T1FN1"> anytext <p> sometext </p> </fn>
<fn id="T2FN1"> anytext <p> sometext </p> </fn>
<fn id="T2FN2"> anytext <p> sometext </p> </fn>
<fn id="F12FN5"> anytext <p> sometext </p> </fn>
等...
我想找到
文本中的<fn </fn>
并删除
<p> and </p>
只是从这些字符串中,<p> and </p>
之间的字符串不会被删除。我尝试了一些preg_replace,但没有成功。
答案 0 :(得分:0)
您可以尝试使用嵌套的正则表达式:
$html = '<fn id="T1FN1"> anytext <p> sometext </p> </fn>
<fn id="T2FN1"> anytext <p> sometext </p> </fn>
<fn id="T2FN2"> anytext <p> sometext </p> </fn>
<fn id="F12FN5"> anytext <p> sometext </p> </fn>';
preg_replace_callback('/<fn[^>]*>.*?<p>.*?</p>.*?</fn>/', function($matches){
return preg_replace('/<p>|</p>/', '', $matches[0]);
}, $html);
注意:this syntax requires PHP 5.3+。如果你正在运行旧版本,请告诉我,我将提供相应的语法。
答案 1 :(得分:0)
试试这个:
$s=<<<HDOC
<fn id="T1FN1"> anytext <p> sometext </p> </fn>
<fn id="T2FN1"> anytext <p> sometext </p> </fn>
<fn id="T2FN2"> anytext <p> sometext </p> </fn>
<fn id="F12FN5"> anytext <p> sometext </p> </fn>
<fnn id="F12FN5"> anytext <p> these tags stay </p> </fnn>
<p> some text that stays with tags </p>
HDOC;
$pattern = '/(<fn[^>]*>[^<]*)<p>([^<]*)<\/p>([^<]*<\/fn>)/';
$replace = '\1\2\3';
echo htmlspecialchars(preg_replace($pattern, $replace, $s));
警告:只会找到一对<p></p>
,anaytext中不能包含标签