在字符串中解析测量值(L x W x H)

时间:2011-12-22 19:53:02

标签: php regex preg-match-all

我需要使用preg_match_all在PHP中使用正则表达式来查找部件并填充数据库。我已经完成了大部分工作,但我唯一能够找到测量部分的部分是:

这是我的字符串:

  

“NA153 - 从老式丙烷罐制成的火碗,可作为水景或玻璃杯可用于不寻常的咖啡桌,23H x 39W - $ 1200.00”

到目前为止,这是我的注册表:

"%([A-Z0-9]{5}) #Find Sku
\s*\-?\s*
(.*)\s*\, # Find Title
\s*
.*([0-9][HWD])\s*\-? #Find Dimensions
\s*
\$([0-9\.]*) # Find Price
%x"

它正确地找到了sku,标题和价格。但尺寸只返回1“9W”

这是我的函数调用:

preg_match_all('{{regular expression}}', '{{string}}', $arr, PREG_PATTERN_ORDER);

任何帮助或见解都会非常感激,因为我不熟悉正则表达式。

2 个答案:

答案 0 :(得分:1)

只需在+组之后投放一个[0-9]量词,就像这样:

"%([A-Z0-9]{5}) #Find Sku
\s*\-?\s*
(.*)\s*\, # Find Title
\s*
.*([0-9]+[HWD])\s*\-? #Find Dimensions
\s*
\$([0-9\.]*) # Find Price
%x"

+量词将导致它在继续[HWD]之前贪婪地找到尽可能多的数字。

编辑:抱歉,这只会让你“39W”。要使其获得多个维度,您需要进一步更改:

'/([A-Z0-9]{5}) #Find Sku
\s*\-?\s*
(.*)\s*\, # Find Title
\s*
.*?([0-9]+[HWD](?:\s+x\s+[0-9]+[HWD])*)\s*\-? #Find Dimensions
\s*
\$([0-9\.]*) # Find Price
%/'

答案 1 :(得分:0)

如果尺寸可以是小数,则可以使用:

(\d+(?:\.\d+)+[HWD](?:\s+x\s+\d+(?:\.\d+)+[HWD])*)\s*-? #Find Dimensions