2014-08-31 105 views
1

请帮忙做的preg_replace正则表达式来改变html标记为 “BB”如何preg_replace html标签?

<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=\"*(.*?)\".*>% 
+2

[你不能用正则表达式解析HTML](http://stackoverflow.com/a/1732454/156811) – Havenard 2014-08-31 17:48:19

+0

我从mysql中得到像text/plain这样的字符串。 preg_replace('/ /i','\ n',$ row ['description']); 它的工作原理。也许我问了这个问题。 – 2014-08-31 18:27:41

回答

1

,因为没有真正的一个模式的简单更换(来自于不同的标签不同的属性,需要在新命名的BB标签),每个替换对的蹦床网上单正则表达式可以帮助:

$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 for caseless和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。根据您的数据,这可能不是在这里使用正则表达式并导致问题的最佳选择。

+0

哼..那么https://eval.in/186194呢? – 2014-08-31 19:45:37

+0

也许你可以扭转这个正则表达式https://eval.in/186199? – 2014-08-31 19:57:25

+0

@ user1791020查看更新后的答案。相反的事情可能是一个新的问题:)但肯定你会解决这个问题! – 2014-09-01 00:34:05