删除包括它们在内的括号之间出现的所有文本

时间:2016-12-26 16:24:05

标签: php regex preg-replace

我需要删除括号内所有出现的文本,包括行本身。

我使用了一段值得的代码,直到它出现多个元素

$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

只需提取 [..]但需要保存此[...]

3 个答案:

答案 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))[^][]*\]

Live demo

说明:

\[              # 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 __^