Php 删除带有Preg_Replace的文本

Php 删除带有Preg_Replace的文本,php,preg-replace,Php,Preg Replace,我有一些文本,如以下示例: Some Text Here [code]Some link[/code] Text [code]Link[/code] Other Text [code]Another Link[/code] Other Text1 我想删除上面、下面和两个代码之间的所有文本。以下是我想要的输出示例: [code]Some Link[/code] [code]Link[/code] [code]Another Link[/code] 我使用preg\u replace删除第一个

我有一些文本,如以下示例:

Some Text Here
[code]Some link[/code]
Text
[code]Link[/code]
Other Text
[code]Another Link[/code]
Other Text1
我想删除上面、下面和两个代码之间的所有文本。以下是我想要的输出示例:

[code]Some Link[/code]
[code]Link[/code]
[code]Another Link[/code]
我使用
preg\u replace
删除第一个代码上方的文本,方法如下:

$message = preg_replace('/(.*?)\[code/si','[code',$message, 1);

你能帮我用
preg\u replace
删除另一个文本吗?

假设你永远不会有
[code]abc[code]def[/code]ghi[/code]
,试试这个:

do {
    $message = preg_replace("((?:\[code\].*?\[/code\])*).*?(?=\[code\]))is","$1",$message,-1,$c);
} while($c);
您可以这样做:

     preg_match_all('/(\[code\].*\[\/code\])/Usmi', $text, $res);
        $cnt = 0;
        foreach ($res as $val) {
          $cnt++;
          $message .= $val[$cnt] . "<br />";          
        }
     echo $message;
preg\u match\u all('/(\[code\].\[\/code\])/Usmi',$text,$res);
$cnt=0;
foreach($res作为$val){
$cnt++;
$message.=$val[$cnt]。“
”; } 回声$信息;
只是为了让@Andreev的解决方案更简单一点:

$text = "
Some Text Here
[code]Some link[/code]
Text
[code]Link[/code]
Other Text
[code]Another Link[/code]
Other Text1
";

$keywords = preg_match_all('/(\[code\].*\[\/code\])/Usmi', $text, $res);
print(implode($res[0]));

您可以在此处进行测试:

您是否尝试过使用
preg\u split
?preg\u split有什么用途?但我需要将文本内容放回变量$message中