Я программно очищаю данные по мере их ввода и вам нужно извлечь информацию о количестве для элемента. Для каждого элемента должно быть пробел между количеством количества и единиц измерения. Иногда он включает десятичную, а иногда и тире (-) бесполезно рядом с информацией о количестве. В тире должно быть либо вставлено между ним и информацией о количестве, либо полностью удалено.regex для вставки пробелов во множестве экземпляров
Регулярное выражение, которое я включил ниже, будет обрабатывать запись Молока, но ни один из остальных.
Примечание: иногда серийный номер в начале строки ($str
), поэтому величина единица должна быть включена в preg_replace
.
$str = "Chicken 4 lbs.";
$str = "Cream of Mushroom Soup 10.4oz";
$str = "4XY Milk 1gal";
$str = "Leaf Spinach -12oz";
$str = "5QB Bananas -6.2lb.";
$str = preg_replace('/(?<=[0-9])(?=[g|g.|oz|oz.|lb|lb.|gal|gal.|mL|mL.|kg|kg.|un|un.|tab|tab.])/',' ', $str);
EDIT: в тестировании ответы (! Все это блестящие, кстати), я придумал с дополнительным измерением: IF тире (-) непосредственно предшествует алфавитно-цифровой символ, я НЕ хотите создать пробел после него.
$str = "Route US-66 4 lb";
Сократите это до '(? <= [0-9]) (? = (G | oz | lb | gal | mL | kg | un | tab) \.?)' '?' Делает '.' необязательным , – tenub