如何从方括号和括号之间删除文本?
例如,我需要
__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可能会导致令人惊讶的结果.
以防您正在寻找递归删除:
$str = preg_replace("/\[([^\[\]]++|(?R))*+\]/", "", $str);
Run Code Online (Sandbox Code Playgroud)
这将转换为:
这[文字[更多文字]]很酷
对此:
这很酷
| 归档时间: |
|
| 查看次数: |
26816 次 |
| 最近记录: |