-1

次のコードでは、期待した結果が得られません。

if (isset($newpost['message']))
{
    $matches = array();
    preg_match_all("~\[QUOTE\=.*;(\d+)\]~isU", $newpost['message'], $matches);

    var_dump($matches);
    die();
}

$matches には、一致した結果が含まれている必要があります。ただし、$matches は常に $newpost 配列全体 (メッセージ部分だけでなく) と等しくなります。上記の結果は次のようになります。

array(22) { ["message"]=> string(17) "testing123..." ["title"]=> &string(0) "" ["iconid"]=> &int(0) ["parseurl"]=> bool(true) ["signature"]=> &int(1) ["preview"]=> &string(0) "" ["disablesmilies"]=> &int(0) ["rating"]=> &int(0) ["username"]=> &string(0) "" ["folderid"]=> &int(0) ["quickreply"]=> &int(0) ["poststarttime"]=> &int(1368357609) ["posthash"]=> &string(32) "4d513f4123f780c6b10739e3a5dd0fb6" ["humanverify"]=> &array(0) { } ["stickunstick"]=> &int(0) ["openclose"]=> &int(0) ["ajaxqrfailed"]=> int(0) ["emailupdate"]=> &int(9999) ["enablesmilies"]=> int(1) ["podcastsize"]=> int(0) ["visible"]=> int(1) ["postid"]=> int(1771567) }

これは、$newpost が参照として扱われる可能性があるためだと思います。確かではありませんが...

4

2 に答える 2

1

このコードを Ideone でテストしたところ、期待どおりに機能しました。

コード:

<?php

$text = <<<EOD
abc [QUOTE=ABC;123]
def [Quote=DEF;456]
ghi
EOD;

$newpost = array('message' => $text);

if (isset($newpost['message'])) {
    preg_match_all('/\\[QUOTE=[^;]++;(\\d++)\\]/i', $newpost['message'], $matches);
    var_dump($matches);
}

結果:

array(2) {
  [0]=>
  array(2) {
    [0]=>
    string(15) "[QUOTE=ABC;123]"
    [1]=>
    string(15) "[Quote=DEF;456]"
  }
  [1]=>
  array(2) {
    [0]=>
    string(3) "123"
    [1]=>
    string(3) "456"
  }
}
于 2013-05-12T11:52:09.470 に答える
0

出力はスクリプトの別の場所から来ました...

于 2013-05-12T11:36:41.387 に答える