如何从字符串中找到“240x320”格式的分辨率大小?

I have a sample code:

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

And using regex:

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

print_r($arr[0]);

Result not change, how to fix it ?

I'm guessing you want to change your regular expression to something like this:

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

The "." matches any character, so when you used .* it just matched the whole string---it doesn't matter what you put after it. With regular expressions, it's generally a good rule of thumb to be as specific as possible. In this case \d+ will match 1 or more numeric digits, so it will stop matching when it gets to the first non-numeric digit, in this case, a space.

Here's the result of $arr that I get with your $text string and the updated regular expression:

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

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

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

)

Hopefully it's closer to what you were looking for.

You may want this instead: /(\d+)\s*x\s*(\d+)/i

It will match a number \d+, followed by arbitrary amount of spaces \s+, then x, then arbitrary amount of spaces, then another number \d+. It also captures the numbers in the index 1 and index 2 of the match array.

/(\d+)(?:\sx\s)(\d+)/i

Use . carefully.

This method will give you a key to access the width / height of these values. By using \d you're targeting digits only

$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;