使用正则表达式在括号之间捕获,它还包含一个特殊字符

时间:2014-09-30 19:34:02

标签: php regex preg-replace

我正在尝试使用preg_replace删除括在括号[]中的不需要的文本块,但只在括号内的任何位置包含星号或星号*的文本块[*]

例如: blah blah blah blah blah [blah] blah blah [blah * blah] [] [blah] blah [blah * blah * * blah]

以上我想要[blah * blah]和[blah * blah * * blah]

我到目前为止:

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

但这会逃脱,或者通过关闭括号并删除太多。

1 个答案:

答案 0 :(得分:3)

请改为尝试:

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

不同之处在于,您需要查找某些字符,而不是任意字符.*,但需要使用右括号[^\]]* - 这是必要的,因为正则表达式是贪婪并查找否则是最后一个结束括号。因为所有的括号,星号和转义而有点难以阅读......

将输出

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