正则表达式以分隔维度

时间:2012-06-21 07:09:17

标签: php regex string

我是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 个答案:

答案 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;