如何preg_replace html标签?

时间:2014-08-31 17:44:23

标签: regex preg-replace

请帮助使preg_replace正则表达式将html标签更改为" BB"

<img src="URL" style="max-width: 780px;"/> 
<div id="center">TEXT</div> 
<a href="http://href.li/?URL" target="blank">$1</a> 
<iframe width="780" height="450" src="//www.youtube.com/embed/TEXT" frameborder="0" allowfullscreen></iframe> 
<strong>TEXT</strong>

[img]$1[/img] 
[center]$1[/center] 
[link]$1[/link] 
[video]$1[/video] 
[strong]$1[/strong]

行。我做到了

%<img src=\"*(.*?)\".*>%

1 个答案:

答案 0 :(得分:1)

由于没有真正的简单替换模式(新命名的bb-tags中需要不同标签的不同属性),每个替换对的单独正则表达式可能会有所帮助:

$rx_map = array(
'~<strong>(.*?)</strong>~is'                    => '[strong]\1[/strong]',
'~<img\s[^>]*\bsrc="([^"]+)".*?/>~is'           => '[img]\1[/img]',
'~<a\s[^>]*\bhref="([^"]+)".*?</a>~is'          => '[link]\1[/link]',
'~<iframe\s[^>]*\bsrc="([^"]+)".*?</iframe>~is' => '[video]\1[/video]',
'~<div\s+id="center">(.*?)</div>~is'            => '[center]\1[/center]',
);

$str = preg_replace(array_keys($rx_map), array_values($rx_map), $str);

用于无壳的修饰符i和用于使点也匹配换行符的s。这将取代:

[img]URL[/img] 
[center]TEXT[/center] 
[link]http://href.li/?URL[/link] 
[video]//www.youtube.com/embed/TEXT[/video] 
[strong]TEXT[/strong]

test at eval.in;正如其他人已经提到的,通常不建议使用正则表达式来解析html。根据您的数据,它可能不是在此处使用正则表达式并导致问题的最佳选择。