【问题标题】:Regex in MySql - replace between Tags including Tags [duplicate]MySql中的正则表达式-在标签之间替换,包括标签[重复]
【发布时间】:2025-11-23 18:55:01
【问题描述】:

可能重复:
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>

【问题讨论】:

    标签: php mysql regex


    【解决方案1】:
    preg_replace("/\[lang_en](.*?)\[\/lang_en]/s", '', $text);
                                ^              ^
                              lazy             |
                                       '.' matches newlines as well
    

    简单测试here

    【讨论】:

    • 这不起作用。此正则表达式还替换字母和其他 html 标签。
    • ideone.com/WGOfM测试代码
    • "这个正则表达式也替换字母"你不想用它来替换字母吗?
    • 我认为他没有意识到你已经逃脱了方括号
    • @user998163 你真的复制了这个答案中的解决方案吗?因为我认为你没有。