Трудная задача

ReMaRk

Новичок
Трудная задача

Люди!!! Мы русские должны помогать друг другу! =)

Помогите решить непосильную для меня задачу... Не скажу что плохо знаю регулярные выражения, но не как не могу составить регу.

Задача - возможны следующие варианты цены:
18р.
от 18р.
до 18р.
договорн.
и вместо р. (рубли) может стоять "у.е." или "$" (бакс)

Надо каким-то неведомым для меня образом отпарсить эту цену (единственное что лезет мне в голову - это реги) и получить отдельно в массиве каждую составляющую цены.
Для первого варианта должно быть 2 элемента (18 и р.)
Для второго - 3 эл. (от, 18, р.)
Для третьего - 3 эл. (до, 18, р.)
И для четвертого - 1 эл. (договорн.)

Если у кого-нибудь будут какие-либо предложения - прошу, нет, умоляю!!! напишите!!!
Буду признателен! Спасибо.
 

woland

Guest
PHP:
// $price - строка с ценой
$int=(int)preg_replace("/[^0-9]/","",$price);
if(!$int){
$output[]="договорн.";}
else{
$limits=array("от ","до ");
foreach($limits as $value){
if(substr_count($price,$value)>0){
$output[]=$value;}}
$output[]=$int;
$currency=array("р.","у.е.","$");
foreach($currency as $value){
if(substr_count($price,$value)>0){
$output[]=$value;}}}
// массив $output - выходные данные
P.S. Возможно, регекспами эта задача решается в одну строчку, но если не найдёшь решения через регекспы, то используй это.
 

asman

Guest
PHP:
$line="от 18р.";
preg_match("/([^0-9]*)(\\d*)(.*)/",$line,$result);
$result[1] - от/до/договорн./etc...
$result[2] - цифры
$result[3] - вид валюты
 

ReMaRk

Новичок
Автор оригинала: asman
PHP:
$line="от 18р.";
preg_match("/([^0-9]*)(\\d*)(.*)/",$line,$result);
$result[1] - от/до/договорн./etc...
$result[2] - цифры
$result[3] - вид валюты
Спасибо огромнейшее... незнаю, почему я до этого сам не додумался. Вообще в последнее время голова кругом идет.
 
Сверху