我需要删除括号内所有出现的文本,包括行本身。
我使用了一段值得的代码,直到它出现多个元素
$array[] = '[2016-12-26 16:48:57 +0100] pkgacct working dir : /cprsync_back3/tamainut';
$array[] = '[2016-12-26 16:48:57 +0100] Copying SSL certificates, CSRs, and keys...[2016-12-26 16:48:57 +0100] Done'
foreach ($array as &$line) {
$line = preg_replace("/\[[^)]+\]/","",$line);
echo $line.PHP_EOL;
}
这适用于第一行,但不适用于第二行
pkgacct working dir : /cprsync_back3/tamainut
Done
只需提取 [..]但需要保存此[...] ?
答案 0 :(得分:1)
看看循环;你的正则表达式也需要修复(注意我添加了?
量词)。
$array[
'[2016-12-26 16:48:57 +0100] pkgacct working dir : /cprsync_back3/tamainut',
'[2016-12-26 16:48:57 +0100] Copying SSL certificates, CSRs, and keys...[2016-12-26 16:48:57 +0100] Done'
];
foreach ($array as $key => $line) {
$array[$key] = preg_replace('/\[(.*?)\]/', "", $line);
}
echo '<pre>';
print_r($array);
答案 1 :(得分:1)
正则表达式:
\[[^][]*(?(?=\[)(?R))[^][]*\]
说明:
\[ # Match opening bracket
[^][]* # Match anything but `[` & `]` characters
(?(?=\[)(?R)) # If previous match ends before `[` repeat whole pattern
[^][]* # //
\] # Match closing bracket
此正则表达式也适用于 嵌套括号 。
代码段:
preg_replace("@\[[^][]*(?(?=\[)(?R))[^][]*\]@", "", $line);
答案 2 :(得分:1)
只需用字符类中的括号替换括号:
$line = preg_replace("/\[[^\]]+\]/","",$line);
// here __^