0

preg_split()を使用して[item:1]と[/ item:1]の間の値を取得するにはどうすればよいですか。
$query= [item:1] my content [/item:1];

これは機能していません
$match = preg_split('/[[item:1][\/item:1]]/', $query);
echo $match[0];

出力は「私のコンテンツ」だけである必要があります。

アップデート:

$ query = '
[page:1]ページ1のコンテンツを取得しました[/ page:1]
[page:2]2ページ目のコンテンツを取得しました[/page:2]
';

//関数を解析します
関数parse_page($ page、$ string){

    //解析をねじ込む可能性のあるものをすべて削除することは非常に重要です
    $ string = str_replace(array( "\ r"、 "\ n"、 "\ t"、 "\ f")、array(''、'')、$ string);

    //ページ番号で文字列をテストします
    preg_match('@ \ [page:'。$page。'\](。*?)\ [/ page:'。$page。'\] @'、$ string、$ matches);

    //成功した場合は一致を返します
    if($ matches){
        $matchesを返します。
    }そうしないと {
        falseを返します。
    }
}

//ページが設定されている場合は、それを取得してみてください
if(isset($ _ GET ['p'])){

    //返された解析値を変数に設定します
    $ page_dump = parse_page(($ _ GET ['p'])、$ query);

    //一致が成功したかどうかを確認します
    if($ page_dump [1]){
        echo $ page_dump [1];
    }そうしないと {
        エコー'0';
    }
}そうしないと {

    //ページが指定されていない場合は、ページ1を解析します。
    $ page_dump = parse_page( '1'、$ query);

    if($ page_dump [1]){
        echo $ page_dump [1];
    }そうしないと {
        echo'ページなし=(';
    }
}
4

1 に答える 1

3

文字列を分割するのではなく、パターンをキャプチャする必要があります。preg_matchそのためには、例えばを使用してください

if (preg_match('@\[item:1\](.*?)\[/item:1\]@s', $query, $matches)) {
    echo $matches[1];
}

編集:テスト済みで動作中

Edit2:「s」(PCRE_DOTALL)修飾子を追加しました-http ://www.php.net/manual/en/reference.pcre.pattern.modifiers.php 。

あなたは本当により良いマークアップソリューションを検討する必要があります(XMLを参照)

于 2011-02-14T03:04:32.173 に答える