2013-01-22 25 views
0

我有一些文字,如下面的例子:刪除文本使用的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

+0

您是否嘗試過使用'preg_split'? –

+0

preg_split的用法是什麼? – user1825932

回答

0

假設你永遠不能擁有[code] abc [code] def [/code] ghi [/code],試試這個:

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

不適用於我,它全部刪除 – user1825932

+0

進行了編輯,現在就試試嗎? –

1

你可以這樣說:

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

但我需要把我的文本的內容,回到我的變量$消息 – user1825932

+0

我編輯,以適應您的要求。 – hugronaphor

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