0

我有一些类似以下示例的文本:

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吗?

4

3 回答 3

1

你可以这样做:

     preg_match_all('/(\[code\].*\[\/code\])/Usmi', $text, $res);
        $cnt = 0;
        foreach ($res as $val) {
          $cnt++;
          $message .= $val[$cnt] . "<br />";          
        }
     echo $message;
于 2013-01-22T14:51:44.990 回答
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

于 2013-01-22T16:00:16.997 回答
0

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

do {
    $message = preg_replace("((?:\[code\].*?\[/code\])*).*?(?=\[code\]))is","$1",$message,-1,$c);
} while($c);
于 2013-01-22T14:40:35.963 回答