2015-03-11 2 views
3

Мне нужно извлечь число и единицу после номера из двух разных строк .. некоторые строки имеют пространство между числом и единицей, как этот 150 g и другие не 150gRegex, чтобы получить номер и строку после номера

$text = 'Rexona Ap Deo Aerosol 150ml Active CPD-05923'; 
$text='Cutex Nail Polish Remover Moisture 100ml '; 

preg_match_all('!\d+!', $text, $matches); 


    if(sizeof($matches[0]) > 1){ 
     // how can I extract 'ml' 
     } 
    else { 
     // how can I extract 150 ml ? 

    } 

Можете ли вы, ребята, помочь?

ответ

4

Вы можете использовать:

preg_match_all('~\b(\d+(?:\.\d{1,2})?)\s*(ml|gm?|kg|cm)\b~i', $text, $matches); 

И использовать подобранные группы # 1 и # 2.

RegEx Demo

+0

Что делать, если число было плавающим, как 1.5Kg, что мне делать? – palAlaa

2

Это должно работать для вас:

preg_match_all('!(\d+\s?\S+)!', $text, $matches); 
  • \ d + матч цифра [0-9]
    • Квантор: + Между одной и неограниченное количество раз
  • \ s? соответствует любому символу пробела [\ r \ n \ t \ f]
    • Квантификатор: ? между нулем и единицей времени
  • \ S + матч любой не-белое пространство символов [^ \ г \ п \ т \ е]
    • Квантор: + Между одной и неограниченное количество раз
Смежные вопросы