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

你可能想要这个:/(\d+)\s*x\s*(\d+)/i

它将匹配一个数字\d+,然后是任意数量的空格\s+,然后x是任意数量的空格,然后是另一个数字\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 回答
1

我猜你想把你的正则表达式改成这样:

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

这 ”。” 匹配任何字符,所以当你使用.*它时,它只匹配整个字符串——你在它后面放什么并不重要。对于正则表达式,尽可能具体化通常是一个很好的经验法则。在这种情况下\d+将匹配一个或多个数字,因此当它到达第一个非数字时它将停止匹配,在这种情况下,一个空格。

这是$arr我使用您的$text字符串和更新的正则表达式得到的结果:

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

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

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

)

希望它更接近您正在寻找的东西。

于 2012-06-12T02:01:33.650 回答