Php 用于分隔维度的正则表达式

Php 用于分隔维度的正则表达式,php,regex,string,Php,Regex,String,我是php新手,我需要一个帮手。 我有一个由高到宽的尺寸标注,输出到单个字符串(宽x高)。我需要把宽度和高度分开。尺寸标注将始终小于100,但可能包含十进制值。还有可能在维度之前或之后出现空白 以下是几个示例维度: 8x10,10x12,24.5x36.625 我想我可以使用strpos和substr完成任务,但是正则表达式会更快吗?更优雅?更准确? [旁白:学习regex的好方法是什么?你有推荐的书籍/网站吗?] $string=' 8.5x10'; $string=trim($string)

我是php新手,我需要一个帮手。 我有一个由高到宽的尺寸标注,输出到单个字符串(宽x高)。我需要把宽度和高度分开。尺寸标注将始终小于100,但可能包含十进制值。还有可能在维度之前或之后出现空白

以下是几个示例维度: 8x10,10x12,24.5x36.625

我想我可以使用strpos和substr完成任务,但是正则表达式会更快吗?更优雅?更准确? [旁白:学习regex的好方法是什么?你有推荐的书籍/网站吗?]

$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;
$string='8.5x10';
$string=修剪($string);
$x=stripos($string,'x');
$size1=substr($string,0,$x);
$size2=substr($string,$x+1);
echo$size1。”
; echo$size2;
$array[0]=>的大小为1, $array[1]=>将具有大小2

$array[0]=>的大小为1,
$array[1]=>将有2个大小

Internet上有很多关于正则表达式的教程,您只需要稍微小心一点,因为有各种各样的家族(perl,老式unix…)

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

当格式是松散定义的时候,这是很好的,因为它允许快速(编程)定义格式、检查格式和检索数据

在您的情况下:
(\d+(\。\d*)?)x(\d+(\。\d*))

  • \d
    :匹配单个数字
  • +
    上一个块出现一次或多次
  • *
    上一个块显示零次或一次或多次
  • 上一个块显示零次或一次
  • ()
    定义块
e、 g.:
d+
将匹配1、12、158

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

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


希望这有帮助

Internet上有很多关于正则表达式的教程,您只需要稍微小心一点,因为有各种各样的家族(perl,老式unix…)

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

当格式是松散定义的时候,这是很好的,因为它允许快速(编程)定义格式、检查格式和检索数据

在您的情况下:
(\d+(\。\d*)?)x(\d+(\。\d*))

  • \d
    :匹配单个数字
  • +
    上一个块出现一次或多次
  • *
    上一个块显示零次或一次或多次
  • 上一个块显示零次或一次
  • ()
    定义块
e、 g.:
d+
将匹配1、12、158

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

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


希望这有助于

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

$string = "1.23 x5 ";
$string = str_replace(" ", "", $string);
list($width, $height) = explode("x", $string);
您可能还希望将值强制转换为浮点,以确保它们实际上是数字:

$width = (float)$width;
$height = (float)$height;

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

$string = "1.23 x5 ";
$string = str_replace(" ", "", $string);
list($width, $height) = explode("x", $string);
您可能还希望将值强制转换为浮点,以确保它们实际上是数字:

$width = (float)$width;
$height = (float)$height;

这是正确的答案…不需要正则表达式。他只需要修改代码,这绝对是最简单的解决方案。谢谢bunchThis是正确答案…不需要正则表达式。他只需要修改代码,这绝对是最简单的解决方案。感谢一堆
explode(“x”,$string)可能吗?=)@k102谢谢你。我的手机不是最好的答录平台
:P
爆炸(“x”,$string)可能吗?=)@k102谢谢你。我的手机不是最好的答录平台
:P
。非常有用。非常感谢您的意见。非常有帮助。非常感谢你的投入。