我是php的新手,我需要一只手。 我有宽度和高度尺寸,输出到单个字符串(宽度 x 高度)。我需要分开宽度和高度。尺寸始终小于100,但可能包含小数值。在尺寸之前或之后也有可能存在空白。
以下是一些示例维度: 8x10,10x12,24.5x36.625
我认为我可以使用strpos和substr完成任务,但正则表达式会更快吗?更优雅?更准确的? [旁边的问题:什么是学习正则表达式的好方法?有没有你推荐的书籍/网站?]
$string=' 8.5x10';
$string=trim($string);
$x = stripos($string,'x');
$size1 = substr($string, 0, $x);
$size2 = substr($string, $x+1);
echo $size1 . '<br />';
echo $size2;
答案 0 :(得分:4)
$string = '8.5x10';
list($width, $height) = explode('x',$string);
答案 1 :(得分:1)
互联网上有很多关于正则表达式的教程,你需要小心谨慎,因为各种各样的家庭都在附近(perl,old-school unix ...)
关于你的问题,substtring
解决方案很可能会更快,因为正则表达式转化为有限状态机器,这可能变得相当复杂......
格式定义松散时很好,因为它允许快速(编程方式)定义格式,检查格式并检索数据。
在您的情况下:(\d+(\.\d*)?)x(\d+(\.\d*))
\d
:匹配一位数字+
上一个区块出现一次或多次*
上一个区块显示为零或一次或多次?
上一个区块出现零次或一次()
定义一个块 e.g。 :d+
将匹配1,12,158
现在认为正则表达式可以匹配一个子集: aaaa15x15aaaa将像15x15一样容易解析
当不需要使用正则表达式时,需要“上下文敏感”解析(例如:行的格式取决于以前的信息)
希望这有帮助
答案 2 :(得分:0)
$string=' 8.5x10';
$array = explode('x',$String);
var_dump($array);
$ array [0] =&gt;将有size1, $ array [1] =&gt;将有size2
答案 3 :(得分:0)
首先,删除所有空格,然后将字符串拆分为x
字符。使用list()
可以更容易地将数组拆分为单独的变量。
$string = "1.23 x5 ";
$string = str_replace(" ", "", $string);
list($width, $height) = explode("x", $string);
您可能还希望将值转换为浮点值,只是为了确保它们实际上是数字:
$width = (float)$width;
$height = (float)$height;