使用Preg_Replace删除文本

时间:2013-01-22 14:36:59

标签: 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_replace删除第一个代码上方的文字,以这种方式:

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

您能否使用preg_replace

帮我删除其他文字

3 个答案:

答案 0 :(得分:1)

你可以这样做:

     preg_match_all('/(\[code\].*\[\/code\])/Usmi', $text, $res);
        $cnt = 0;
        foreach ($res as $val) {
          $cnt++;
          $message .= $val[$cnt] . "<br />";          
        }
     echo $message;

答案 1 :(得分:1)

只是为了让@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]));

您可以在此处进行测试:http://phptester.net/index.php?lang=en

答案 2 :(得分:0)

假设您永远不会[code] abc [code] def [/code] ghi [/code],请尝试:

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