我需要使用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);
任何帮助或见解都会非常感激,因为我不熟悉正则表达式。
答案 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