Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Поиск границ числового диапазона (от ... до ... руб)
 
 автор: mihim   (09.10.2011 в 11:16)   письмо автору
 
 

Здравствуйте.

Есть строки вида:

"от 50000 до 60000 руб"
"от 50000 руб"
"до 60000 руб"
"до 60000руб"
"50000 - 60000 руб"
"50000-60000 руб"
"от 50000 - 60000 руб"
"от 50000 - 60000"
"Оклад от 50000"

С помощью регулярного выражения нужно вычленить границы диапазона и слова их определяющие, т.е. по функции preg_match должны образовываться карманы типа

Для "до 60000 руб"

[0] => до 60000руб
[1] =>
[2] =>
[3] => до
[4] => 60000

Для "от 50000 до 60000 руб"

[0] => от 50000 до 60000 руб
[1] => от
[2] => 50000
[3] => до
[4] => 60000

и.т.д.

Я сделал вот такую регулярку: "/(от)?\s?(\d*)\s?(до|-)?\s?(\d*)\s?(?:руб)?/s"

Она работает для всех случаев, кроме "Оклад от 50000".
Как заставить регулярное выражение правильно реагировать и на эту строку?

  Ответить  
 
 автор: cheops   (09.10.2011 в 11:34)   письмо автору
 
   для: mihim   (09.10.2011 в 11:16)
 

Попробуйте изменить первый \d* на \d+
<?php
  $arr
[] = "от 50000 до 60000 руб";
  
$arr[] = "от 50000 руб";
  
$arr[] = "до 60000 руб";
  
$arr[] = "до 60000руб";
  
$arr[] = "50000 - 60000 руб";
  
$arr[] = "50000-60000 руб";
  
$arr[] = "от 50000 - 60000 руб";
  
$arr[] = "от 50000 - 60000";
  
$arr[] = "Оклад от 50000";
  
$pattern =  "/(от)?\s?(\d+)\s?(до|-)?\s?(\d*)\s?(?:руб)?/s";
  for(
$i 0$i count($arr); $i++)
  {
    
preg_match($pattern$arr[$i], $out);
    echo 
$arr[$i]."<br />\r\n";
    echo 
"<pre>\r\n";
    
print_r($out);
    echo 
"</pre>\r\n";
  }
?>

  Ответить  
 
 автор: mihim   (09.10.2011 в 12:04)   письмо автору
 
   для: cheops   (09.10.2011 в 11:34)
 

>Попробуйте изменить первый \d* на \d+

Уже пробовал, в этом случае некорректно отрабатывается "до 60000 руб":

[0] => 60000 руб
[1] =>
[2] => 60000
[3] =>
[4] =>

А должно быть:

[0] => 60000 руб
[1] =>
[2] =>
[3] => до
[4] => 60000

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования