0

「{X}」または「{XX}」の形式の特別なフラグを含むテキストデータを使用しています。Xは任意の英数字です。これらのフラグが隣接している場合、または分離されている場合、これらのフラグには特別な意味が割り当てられます。隣接するフラグと一致し、グループ内の各フラグを分離する正規表現が必要です。

たとえば、次の入力が与えられます。

{B}{R}: Target player loses 1 life.
{W}{G}{U}: Target player gains 5 life.

出力は概算である必要があります。

("{B}{R}",
 "{W}{G}{U}")

("{B}",
 "{R}")

("{W}",
 "{G}",
 "{U}")

私のPHPコードは隣接する配列を正しく返していますが、分割配列には各グループの最後に一致するフラグのみが含まれています。

$input = '{B}{R}: Target player loses 1 life.
{W}{G}{U}: Target player gains 5 life.';
$pattern = '#((\{[a-zA-Z0-9]{1,2}})+)#';
preg_match_all($pattern, $input, $results);
print_r($results);

出力:

Array
(
    [0] => Array
        (
            [0] => {B}{R}
            [1] => {W}{G}{U}
        )

    [1] => Array
        (
            [0] => {B}{R}
            [1] => {W}{G}{U}
        )

    [2] => Array
        (
            [0] => {R}
            [1] => {U}
        )

)

助けてくれてありがとう!

4

1 に答える 1

0
unset($results[1]);
foreach($results[0] AS $match){
    preg_match_all('/\{[a-zA-Z0-9]{1,2}}/', $match, $r);
    $results[] = $r[0];
}

これが、必要なデータ構造を作成する唯一の方法です。ただし、 preg_split も同様に機能します。

unset($results[1]);
foreach($results[0] AS $match)
    $results[] = preg_split('/(?<=})(?=\{)/', $match);
于 2013-01-09T21:54:06.283 に答える