我有一个示例代码:
$text = "240 x 400 pixels, 3.0 inches (~155 ppi pixel density)";
并使用正则表达式:
preg_match_all('/(.*)( x )(.*)/i', $text, $arr);
print_r($arr[0]);
结果没有改变,如何解决?
你可能想要这个:/(\d+)\s*x\s*(\d+)/i
它将匹配一个数字\d+
,然后是任意数量的空格\s+
,然后x
是任意数量的空格,然后是另一个数字\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;
我猜你想把你的正则表达式改成这样:
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
)
)
希望它更接近您正在寻找的东西。