需要有关正则表达式的帮助以删除方括号和之间的任何内容

Ste*_*nte 24 php regex

如何从方括号和括号之间删除文本?

例如,我需要 __CODE__

成为

__CODE__

这是我正在尝试使用的东西,但它没有做到这一点

__CODE__

我结束了 __CODE__

谢谢

Tom*_*eld 34

[和]是正则表达式中的特殊字符.它们用于列出匹配的字符.[匹配"a"和"z"之间的任何小写字母. ]匹配"0","3"或"b".要匹配字符"["和"]",您必须使用前面的符号来转义它们[a-z].

您的代码当前说"用a空字符串替换任何字符"(为了清楚起见,您从键入它们的顺序重新排序).


贪婪的比赛:

preg_replace('/\[.*\]/', '', $str); // Replace from one [ to the last ]
Run Code Online (Sandbox Code Playgroud)

贪婪的比赛可以匹配多个[s和] s.那个表达将把z它转化为[03b].


Perl有一个非贪婪匹配的语法(你很可能不想贪婪):

preg_replace('/\[.*?\]/', '', $str);
Run Code Online (Sandbox Code Playgroud)

非贪婪的匹配尝试捕获尽可能少的字符.使用相同的例子:[变成].


仅限以下第一个]:

preg_replace('/\[[^\]]*\]/', '', $str); // Find a [, look for non-] characters, and then a ]
Run Code Online (Sandbox Code Playgroud)

这更明确,但更难阅读.使用相同的示例文本,您将获得非贪婪表达式的输出.


请注意,这些都没有明确涉及空格.[和]两侧的空格将保留.

另请注意,所有这些都可能因格式错误的输入而失败.没有匹配的多个[s和] s可能会导致令人惊讶的结果.


And*_* SK 8

以防您正在寻找递归删除:

$str = preg_replace("/\[([^\[\]]++|(?R))*+\]/", "", $str);
Run Code Online (Sandbox Code Playgroud)

这将转换为:

这[文字[更多文字]]很酷

对此:

这很酷