1

我是 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;
4

4 回答 4

4
$string = '8.5x10';
list($width, $height) = explode('x',$string);
于 2012-06-21T07:11:46.340 回答
1

互联网上到处都是关于正则表达式的教程,你只需要小心一点,因为周围有各种各样的家庭(perl,old-school unix ...)

关于您的问题,substtring解决方案很可能会更快,因为正则表达式转换为有限状态机器,这可能变得相当复杂......

当格式定义松散时很好,因为它允许快速(程序员明智地)定义格式,检查它并检索数据。

在你的情况下:(\d+(\.\d*)?)x(\d+(\.\d*))

  • \d: 匹配单个数字
  • +上一个块出现一次或多次
  • *前一个块出现零次或一次或多次
  • ?前一个块出现零次或一次
  • ()定义一个块

例如:d+将匹配 1、12、158

现在认为正则表达式可以匹配一个子集:aaaa15x15aaaa 将像 15x15 一样容易解析

何时不使用正则表达式是您需要“上下文敏感”解析(例如:一行的格式取决于先前的信息)

希望这可以帮助

于 2012-06-21T07:18:21.427 回答
0
$string=' 8.5x10';
$array = explode('x',$String);
var_dump($array);

$array[0] => 将有 size1 , $array[1] => 将有 size2

于 2012-06-21T07:15:30.693 回答
0

首先,去掉所有的空格,然后在字符上拆分字符串x。使用list()可以更容易地将数组拆分为单独的变量。

$string = "1.23 x5 ";
$string = str_replace(" ", "", $string);
list($width, $height) = explode("x", $string);

您可能还想将值转换为浮点数,以确保它们实际上是数字:

$width = (float)$width;
$height = (float)$height;
于 2012-06-21T07:22:39.123 回答