2
$pattern = '#\[img (([^="\]]+)="([^"]+)" ?)+\]#';
preg_match_all($pattern,$blog,$matches,PREG_PATTERN_ORDER);
[img size="preview" click="http://text.com" align="right" src="pic:3378f.jpg"]

上部のコードは、上記のように BBCode タグに一致しますが、正規表現のサブパターンに従ってすべてを返す必要がある場合に、最後の属性のみを返します。どうしたんだ?

4

1 に答える 1

2

[img]これが機能するには、最初にブロックを一致させる必要があります。

preg_match_all('#\[img(.*?)\]#s', $blog, $matches);

タグ内のパターンを記憶し、別のループを使用してパラメーターを抽出し、別の を使用しますpreg

foreach ($matches[1] as $img) {
    preg_match_all('#\s*([^=]+)="([^"]*)"#', $img, $matches);
    // create key-pair array
    $params = array_combine($matches[1], $matches[2]);
    print_r($params);
}

出力:

Array
(
    [size] => preview
    [click] => http://text.com
    [align] => right
    [src] => pic:3378f.jpg
)
于 2012-08-30T02:08:00.743 に答える