サンプルコードがあります:
$text = "240 x 400 pixels, 3.0 inches (~155 ppi pixel density)";
そして正規表現を使用して:
preg_match_all('/(.*)( x )(.*)/i', $text, $arr);
print_r($arr[0]);
結果が変わらないのですが、どうすれば修正できますか?
正規表現を次のように変更したいと思います。
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
)
)
うまくいけば、それはあなたが探していたものに近いです.
代わりにこれが必要な場合があります:/(\d+)\s*x\s*(\d+)/i
\d+
これは、 number 、その後に任意の量のスペース\s+
、次にx
、任意の量のスペース、さらに別の numberに一致します\d+
。また、一致配列のインデックス 1 とインデックス 2 の数値も取得します。
/(\d+)(?:\sx\s)(\d+)/i
.
慎重に使用してください。
このメソッドは、これらの値の幅/高さにアクセスするためのキーを提供します。\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;