我有一些文字如下例:
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
?
答案 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);