1

サンプルコードがあります:

$text = "240 x 400 pixels, 3.0 inches (~155 ppi pixel density)";

そして正規表現を使用して:

preg_match_all('/(.*)( x )(.*)/i', $text, $arr);

print_r($arr[0]);

結果が変わらないのですが、どうすれば修正できますか?

4

4 に答える 4

1

正規表現を次のように変更したいと思います。

preg_match_all('/(\d+) x (\d+)/i', $text, $arr);

「。」は任意の文字に一致するため、使用.*すると文字列全体に一致するだけで、その後に何を付けても問題ありません。正規表現では、一般的にできるだけ具体的にするのが良い経験則です。この場合\d+、 は 1 桁以上の数字に一致するため、最初の数字以外の数字 (この場合はスペース) に到達すると一致を停止します。

$arrあなたの$text文字列と更新された正規表現で得た結果は次のとおりです。

Array
(
    [0] => Array
        (
            [0] => 240 x 400
        )

    [1] => Array
        (
            [0] => 240
        )

    [2] => Array
        (
            [0] => 400
        )

)

うまくいけば、それはあなたが探していたものに近いです.

于 2012-06-12T02:01:33.650 に答える
1

代わりにこれが必要な場合があります:/(\d+)\s*x\s*(\d+)/i

\d+これは、 number 、その後に任意の量のスペース\s+、次にx、任意の量のスペース、さらに別の numberに一致します\d+。また、一致配列のインデックス 1 とインデックス 2 の数値も取得します。

于 2012-06-12T01:52:13.787 に答える
1
/(\d+)(?:\sx\s)(\d+)/i

.慎重に使用してください。

于 2012-06-12T01:53:25.037 に答える
1

このメソッドは、これらの値の幅/高さにアクセスするためのキーを提供します。\d を使用すると、数字のみをターゲットにしています

$text = "240 x 400 pixels, 3.0 inches (~155 ppi pixel density)";
preg_match_all('/(?P<width>\d+) x (?P<height>\d+)/i', $text, $arr);
print_r($arr);exit;
于 2012-06-12T01:54:07.440 に答える