MySql中的正则表达式 - 替换包含标签的标签

时间:2012-06-30 15:09:08

标签: php mysql regex

  

可能重复:
  PHP Regex Get Text Between BBCode Tags

我的文字如下:

  

[lang_de]德语内容[/ lang_de] [lang_en]英文内容[/ lang_en]。

我想替换[lang_en][/lang_en]之间的所有文字,包括开始和结束语言标记。

这是我目前的正则表达式:

UPDATE wp_posts SET post_content = '" . addslashes(preg_replace("/[lang_en](.*)[\/lang_en]/", '', $row['post_content'])) . "' WHERE ID = " . $row['ID']

有了这个正则表达式,我得不到有效的结果。它也取代了html标签等。

正确的正则表达式是什么?

这是一个文字示例:

[lang_de]
<!--more-->
<div class="s-desc">
<br/>
Länge: 3:50 min | Tempo: 125 bpm
<p>
Text<br/>
</p>
<p>
<a href="#">LoFi-Version zum Testeinsatz in Ihrem Projekt hier downloaden</a>.     (Rechstklick-->Ziel speichern unter...)<br/>
Die Nutzung dieser LoFi-Version ist ausschließlich für Testzwecke erlaubt!
</p>
</div>
[/lang_de]


[lang_en]<!--more-->
<div class="s-desc">
<br/>
Length: 3:50 min | Tempo: 125 bpm
<p>
Text<br/>
</p>
<p>
<a href="#">Download a lofi-version to test with your project here</a>. (right-click-->save target as...)<br/>
The usage of this lofi-version is permitted for testing purposes only!
</p>
</div>
[/lang_en]

结果应如下所示:

<!--more-->
<div class="s-desc">
<br/>
Länge: 3:50 min | Tempo: 125 bpm
<p>
Text<br/>
</p>
<p>
<a href="#">LoFi-Version zum Testeinsatz in Ihrem Projekt hier downloaden</a>.     (Rechstklick-->Ziel speichern unter...)<br/>
Die Nutzung dieser LoFi-Version ist ausschließlich für Testzwecke erlaubt!
</p>
</div>

1 个答案:

答案 0 :(得分:-1)

preg_replace("/\[lang_en](.*?)\[\/lang_en]/s", '', $text);
                            ^              ^
                          lazy             |
                                   '.' matches newlines as well

简单测试here