删除所有出现的括号之间的文本,包括它们自己
我需要删除所有出现的括号之间的文本,包括它们自己的行。删除所有出现的括号之间的文本,包括它们自己
我用了一段代码,这是值得,直到它出现一个以上的元素
$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);
应该工作[但似乎没有](https://www.regex101.com/r/HYZUVI/1)[如此] [https: //www.regex101.com/r/HYZUVI/2)。 –
好点。由于没有涉及量词,因此它与括号内的'] ... ['之间的内容不匹配。说我必须应用它[**'[[^] [] * +(?:(?R)?[^] [] *)* +]'**](https://www.regex101 .com/r/sTlH1A/3)(也缩短了*递归的量化条件语句*)。这是一个线性正则表达式,您可以将其与您的建议进行比较。 @bobblebubble – revo
只需通过支架在字符类替换括号:
$line = preg_replace("/\[[^\]]+\]/","",$line);
// here __^
节约时,有字符串中是否匹配?也许'^(\ [([^)] +?)\])。*?\ 1(* SKIP)(* FAIL)|^\ [[^)] +?\]。 – chris85
Btw ['preg_replace'](http://php.net/manual/en/function.preg-replace.php)* subject *也可以是一个数组[如本演示中所示](https://eval.in/704883)。 –