使用Regex在括号之间捕获,括号中还包含一个特殊字符


Using Regex to capture between brackets, that also contain a special character

我正试图使用preg_replace来删除封装在方括号[]内的不需要的文本块,但只删除方括号[*]内任何位置包含一个或多个星号*的文本块

例如:等等等等等等等等

在以上内容中,我想要[废话]和[废话]

我已经到达:

$new_string = preg_replace('/'[.*('*).*']/', '', $string); 

但这会逃脱,或者超过了右括号并删除了太多内容。

试试这个:

$new_string = preg_replace('/'[[^']]*('*)[^']]*']/', '', $string);

不同的是,您不是寻找一些任意字符.*,而是寻找一些字符,但要寻找右括号[^']]*——这是必要的,因为正则表达式是贪婪,否则会寻找最后一个右括号。有点难以阅读,因为所有的括号,星号和转义。。。

它将输出

blah blah blah blah [ blah ] blah blah  [] [ blah ] blah