简单的regex帮助删除括号和中间的内容


simple regex assistance removing brackets and contents inbetween

我需要删除括号和中间的所有内容:

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

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

您需要星号*+量词才能工作:

/'[.*?']/i

如果没有它,(.)将只匹配单个字符。

更好的是,如果[]之间的值不能包含]本身,则可以使用更强大的表达式:

/'[[^']]+']

您没有设置限定符,因此匹配失败,字符串被重复。您还使用了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);