我正在尝试使用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);
但这会逃脱,或者通过关闭括号并删除太多。
答案 0 :(得分:3)
请改为尝试:
$new_string = preg_replace('/\[[^\]]*(\*)[^\]]*\]/', '', $string);
不同之处在于,您需要查找某些字符,而不是任意字符.*
,但需要使用右括号[^\]]*
- 这是必要的,因为正则表达式是贪婪并查找否则是最后一个结束括号。因为所有的括号,星号和转义而有点难以阅读......
将输出
blah blah blah blah [ blah ] blah blah [] [ blah ] blah