Разобрать измерения (Д х Ш х В) в строке - PullRequest
0 голосов
/ 22 декабря 2011

Мне нужно пересмотреть строку в PHP с preg_match_all, чтобы найти детали и заполнить базу данных.У меня почти все получилось, но единственная часть, на которую я повесил трубку, это нахождение части измерений:

Вот моя строка:

"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, title и price.Но измерения он возвращает только 1 "9W"

вот мой вызов функции:

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

Любая помощь или понимание будет принята с благодарностью, так как я новичок в регулярных выражениях.

Ответы [ 2 ]

1 голос
/ 22 декабря 2011

Просто добавьте квантификатор + после группы [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].

Редактировать : Извините, вы получите только 39 Вт. Чтобы захватить более одного измерения, вам нужно изменить его еще раз:

'/([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
%/'
0 голосов
/ 23 декабря 2011

Если размеры могут быть десятичными, вы можете использовать:

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