我有一个示例代码:
$text = "240 x 400 pixels, 3.0 inches (~155 ppi pixel density)";
使用正则表达式:
preg_match_all('/(.*)( x )(.*)/i', $text, $arr);
print_r($arr[0]);
结果没有变化,如何解决?
答案 0 :(得分:1)
您可能需要这样做:/(\d+)\s*x\s*(\d+)/i
它会匹配一个数字\d+
,然后是任意数量的空格\s+
,然后是x
,然后是任意数量的空格,然后是另一个数字\d+
。它还捕获匹配数组的索引1和索引2中的数字。
答案 1 :(得分:1)
/(\d+)(?:\sx\s)(\d+)/i
小心使用.
。
答案 2 :(得分: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;
答案 3 :(得分: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
)
)
希望它更接近你所寻找的东西。