2013-12-17 3 views
-1

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

  • Есть 10Ku пера
  • 10ku пера
  • У меня есть 10Mu пера $ 1 каждый
  • У вас есть 1000 ручек на 5 каждый
  • 1KU ручки
  • 1 ручка

единиц могут быть Ku, ку, K, Mu, M, m, k или вообще нет единиц вообще.

Я хотел бы извлечь номер и единицы. Для приведенного выше вопроса, результаты должны быть:

  • 10, Ku
  • 10, ка
  • 10, Mu
  • 1000, нуль
  • 1, ка
  • 1, нулевой

    $pattern = '/(\d+)\s*(M|m|K|k|t|T)*/';  
    preg_match_all($pattern, $sentence, $qty); 
    
    $parsed['qty'] = $qty[1][0]; 
    $parsed['units'] = $qty[2][0]; 
    

Спасибо,

+2

Вы даже что-нибудь сами пробовали? – Anders

+1

Вы не говорили о том, какие правила вам нужно выполнять в необработанной строке. Например, для «У вас 1000 ручек по 5 штук», как вы знаете, что значение, которое вы ищете, равно 1000, а не 5? Без каких-либо ограничений по этой проблеме вы не сможете найти решение. –

+0

Я пробовал ниже, но, похоже, не работает. –

ответ

0

Correct regexp:

([0-9]+)([A-Z][a-z])* 

Sample code:

foreach($input as $test) 
{ 
    if(preg_match('#([0-9]+)([A-Za-z]*)#', $test, $matches)) 
    echo $matches[1] . ' - ' . ($matches[2] ?: 'NULL') . "\n"; 
} 

Выходы:

10 - Ku 
10 - ku 
10 - Mu 
1000 - NULL 
1 - ku 
1 - NULL 
+0

Нет, это не так, нажмите ссылку на образец кода, потому что вместо 'preg_match_all' вместо' preg_match_all' используется 'preg_match', и [" Майк, я бы хотел проигнорировать второе число.- Thanesh Sunthar 29 мин. Назад »] (http://stackoverflow.com/questions/20642942/match-units-in-regular-expression/20643610#comment30901454_20642942) –

+0

Я прикрутил что-то еще, хотя исправлено: P –

+0

Спасибо это работает. –

Смежные вопросы