Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 删除括号中所有出现的文本,包括它们本身_Php_Regex_Preg Replace - Fatal编程技术网

Php 删除括号中所有出现的文本,包括它们本身

Php 删除括号中所有出现的文本,包括它们本身,php,regex,preg-replace,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'

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

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

$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);
正则表达式:

说明:

preg_replace("@\[[^][]*(?(?=\[)(?R))[^][]*\]@", "", $line);
这个正则表达式应该也适用于嵌套的括号

代码段:

$line = preg_replace("/\[[^\]]+\]/","",$line);
//                   here __^

只需将括号替换为字符类中的括号:


当字符串中有匹配项时保存?也许^\[^]+?\].\1*跳过*失败^\[^]+?\].$?顺便说一句,主题也可以是数组。答案应该有解释。这是没有意义的,因为你只是在重复原来的台词……应该有用的,怎么样?说得好。它不匹配]…[括号内的任何内容,因为没有涉及量词。我说我必须将它也应用于?量词的缩短递归条件语句。这是一个线性正则表达式,您可以将其与建议的正则表达式进行比较。@bobblebubble
preg_replace("@\[[^][]*(?(?=\[)(?R))[^][]*\]@", "", $line);
$line = preg_replace("/\[[^\]]+\]/","",$line);
//                   here __^