0

次の例のようなテキストがあります。

Some Text Here
[code]Some link[/code]
Text
[code]Link[/code]
Other Text
[code]Another Link[/code]
Other Text1

2 つのコードの上、下、および間にあるすべてのテキストを削除したいと考えています。これが私が望む出力の例です:

[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

@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 に答える
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 に答える
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 に答える