简单的正则表达式帮助删除中间的括号和内容

时间:2013-11-29 22:29:25

标签: php regex

我需要删除括号及其间的所有内容:

$url = 'abc[wenn]';
echo preg_replace('/\[(.)\]/i','',$url);

我的正则表达式有什么不正确?

2 个答案:

答案 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);