我想使用preg_replace()删除包含其内容的括号,但我无法在模式中使用延迟(非贪婪),因为结束括号是结束字符,括号之间的文本总是随机字符长度,可以包含数字,下划线和连字符。
代码 -
$array = array(
"Text i want to keep (txt to remove)",
"Random txt (some more random txt)",
"Keep this (remove)",
"I like bananas (txt)"
);
$pattern = "@pattern@";
foreach($array as $new_txt){
$new_outputs .= preg_replace($pattern, '', $new_txt)."\n";
}
echo $new_outputs;
通缉输出 -
Text i want to keep
Random txt
Keep this
I like bananas
我不使用正则表达式,找不到任何解决问题的方法。
答案 0 :(得分:9)
以下正则表达式应该这样做:
$pattern = '@\(.*?\)@';
.*?
是任何事物的非贪婪匹配。
答案 1 :(得分:3)
$new_outputs .= preg_replace('@\([^\)]*\)$@','',$new_txt);
答案 2 :(得分:2)
这可能会对您有所帮助:
$pattern = "/\([^)]*\)+/";
foreach($array as $new_txt){
$new_outputs .= preg_replace($pattern, '', $new_txt)."\n";
}