删除括号之间所有出现的文本,包括它们自己
Remove all occurrences of text between brackets including themselves
我需要删除括号之间出现的所有文本,包括行本身。
我使用一段值得的代码,直到它出现不止一个元素
$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
只需要提取什么 [..] 但要保留这个 [..] ?
看看循环;您的正则表达式也需要修复(注意我添加了 ?
量词)。
$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);
正则表达式:
\[[^][]*(?(?=\[)(?R))[^][]*\]
解释:
\[ # Match opening bracket
[^][]* # Match anything but `[` & `]` characters
(?(?=\[)(?R)) # If previous match ends before `[` repeat whole pattern
[^][]* # //
\] # Match closing bracket
这个正则表达式应该也适用于 嵌套括号。
代码片段:
preg_replace("@\[[^][]*(?(?=\[)(?R))[^][]*\]@", "", $line);
只需将字符中的括号替换为括号 class:
$line = preg_replace("/\[[^\]]+\]/","",$line);
// here __^
我需要删除括号之间出现的所有文本,包括行本身。
我使用一段值得的代码,直到它出现不止一个元素
$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
只需要提取什么 [..] 但要保留这个 [..] ?
看看循环;您的正则表达式也需要修复(注意我添加了 ?
量词)。
$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);
正则表达式:
\[[^][]*(?(?=\[)(?R))[^][]*\]
解释:
\[ # Match opening bracket
[^][]* # Match anything but `[` & `]` characters
(?(?=\[)(?R)) # If previous match ends before `[` repeat whole pattern
[^][]* # //
\] # Match closing bracket
这个正则表达式应该也适用于 嵌套括号。
代码片段:
preg_replace("@\[[^][]*(?(?=\[)(?R))[^][]*\]@", "", $line);
只需将字符中的括号替换为括号 class:
$line = preg_replace("/\[[^\]]+\]/","",$line);
// here __^