0

文字列からいくつかの値を取り出したい (関数内)

if(!preg_match('/(.+)\.([0-9]*)x([0-9]*)(w|wr|r)?\.([^\.]+)$/', $filename, $matches))
    return false;

$file = $matches[1];
$width = $matches[2];
$height = $matches[3];
$set_watermark_or_nonconstrain = $matches[4];   // that's what I need to fix
$ext = $matches[5];

ただし、{$image[0]->filename|resize:614:300:r} (Smarty) のような文字列を設定すると、$set_watermark_or_nonconstrain が常に「w」であることを除いて、すべてうまくいきます。このサブマスクから「w」、「wr」、または「r」を取得するには、w|wr|r の代わりに何を設定する必要がありますか? ありがとう!

4

1 に答える 1

1

あなたが与えた文字列の例を使用して、次の式はあなたが探していることを行います

   $string = '{$image[0]->filename|resize:614:300:r}';

   if(preg_match('/\{([^\|]+)\|[^:]+:(\d+):(\d+):([^}]+)/', $string, $m)){  
    echo 'm1: '.$m[1] ."<br />\n";
    echo 'm2: '.$m[2] ."<br />\n";
    echo 'm3: '.$m[3] ."<br />\n";
    echo 'm4: '.$m[4] ."<br />\n";
   }

次の出力が生成されます。

m1: $image[0]->filename
m2: 614
m3: 300
m4: r
于 2013-06-17T13:10:02.500 に答える