2012-01-16 3 views
2

У меня есть строка, где значение цены ($ 544.50) может быть где угодно в строке. например: HP G60-630US Ноутбук: Ноутбуки | RadioShack.com -> $ 259,97 (radioshack.com)Получить значение цены из строки

Мне нужно получить значение: 259.97 из строки

Для этого я попытался с помощью некоторых случайных регулярных выражений х. Но не повезло!

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

Заранее спасибо.

+1

Всегда ли это в долларах ($)? – SERPRO

+1

Простые регулярные выражения: '\ $ \ d + (\. \ D {1,2})?' – noob

+0

\ $ \ d + (\. \ D {1,2})? Это работает! любая идея о трубах yahoo. После сопоставления номера нам нужно получить только это число. Для этого нам нужно указать значение в поле значений. Есть идеи? – Shirish

ответ

0

Что-то, как это будет, вероятно, работать:

/\$(\d*\.?\d+?)/ 
0

\ $ (\ d * \ \ d *.?) Должен работать, а не оптимальные, но, вероятно, полезным.

(Важно:. Побег $ и, что специальные символы)

+0

Это будет соответствовать чему-то вроде этого: '$ 300 rfersijfurhfurnfuerfnurjfrifnrunfurfrfurhufrhfhr 4594545' – noob

+0

@micha: Я забыл избежать., Да. Но даже без этого я не вижу, как будет соответствовать ваша строка? d соответствует цифре,. ничего (но один раз максимум). Я использовал * вместо +, чтобы разрешить такие цены, как $ .50 – Rumpel

1

[$]?[0-9]*(\.)?[0-9]?[0-9]?

Это должно совпадать с $ знаком и без нее.

+0

Что находит «60» и «630» в номере модели. –

11

Это регулярное выражение будет работать с несколькими валютами: $ £ €

[\$\£\€](\d+(?:\.\d{1,2})?) 

Example

+0

[\ $ \ £ \ €] (\ d + (?: \. \ D {1,2})?) Его работа! Еще один хромой вопрос. В трубках Yahoo, используя модуль regex, после сопоставления нам нужно указать значение в поле значения. Так что я могу получить только номер из полной строки. Можете ли вы помочь? – Shirish

+0

Номер находится в первом совпадении регулярного выражения. Обычно совпадение [0] - это полная строка, а совпадение [1] - это номер, который вы ищете. Я не знаю о трубках yahoo. но можете ли вы выбрать матч, который хотите использовать? – SERPRO

0

Это один находит первое десятичное число в строке:

^[^\d]*(\d+|\d+((,|\.)\d{1,2}))(\s|[a-zA-Z)]|€|$).* 
  • выглядит только для чисел с 0-2 знаками десятичной запятой или запятой разрешено
  • нет необходимости в пробелах до или после номера
  • номер не должен заканчиваться каким-либо разделителем (например, 12,12. или 12! не возвращается)
  • число может заканчиваться знаком евро €
  • работает на США отрицательные числа ($ 1233,50)
+0

Когда я проверяю, что на данной строке радиокачки он не находит соответствия. –

+0

Он должен работать на положительные числа, например. $ 1233,50. Теперь обновили регулярное выражение, чтобы принять также отрицательные числа: ($ 1233.50) – besimple

0

Вот способ замены и извлечения

Экстракт:

preg_match('/\$([0-9]+[\.]*[0-9]*)/',$string,$matches); 
foreach($matches as $match) { 
    echo $match."<br>"; 
} 
//echo $matches[0]; for just the first match 

Изменить/Заменить:

$string = preg_replace_callback('/\$([0-9]+[\.]*[0-9]*)/', function ($matches) { 


      foreach ($matches as $match) { 
       // only if value is !empty and higher than 0 
       $tmp = str_replace("$", "", $match); 
       if ($tmp > 0 && $tmp != "") { 
        //do something to $tmp in this case round to two decimal places 
        return "$" . round($tmp,2); 

       } 

      } 

     }, $string); 

Возможно, лучший способ справиться с символом на моем примере замены.

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

  • Нет связанных вопросов^_^