我需要删除括号及其间的所有内容:
$url = 'abc[wenn]';
echo preg_replace('/\[(.)\]/i','',$url);
我的正则表达式有什么不正确?
答案 0 :(得分:3)
您需要明星*
或+
量词来实现此目的:
/\[.*?\]/i
如果没有它,(.)
只匹配一个字符。
更好的是,如果[
和]
之间的值不能包含]
本身,那么您可以使用更强大的表达式:
/\[[^\]]+\]
答案 1 :(得分:2)
您没有设置量词,因此匹配失败并且字符串正在重复。您还使用了i
修饰符(不区分大小写),在这种情况下无效且可以删除。
以下量词被认可。
* Match 0 or more times
+ Match 1 or more times
以下是您正在寻找的方法。
preg_replace('/\[[^\]]*\]/', '', $url);
正则表达式:
\[ '['
[^\]]* any character except: '\]' (0 or more times)
\] ']'
如果您要删除嵌套的括号abc[foo[bar[baz]]]
,则可以使用以下内容:
preg_replace('/\[(?:[^\[\]]|(?R))*\]/', '', $url);