|
|
|
| Здравствуйте.
Есть строки вида:
"от 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".
Как заставить регулярное выражение правильно реагировать и на эту строку? | |
|
|
|
|
|
|
|
для: 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";
}
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(09.10.2011 в 11:34)
| | >Попробуйте изменить первый \d* на \d+
Уже пробовал, в этом случае некорректно отрабатывается "до 60000 руб":
[0] => 60000 руб
[1] =>
[2] => 60000
[3] =>
[4] =>
А должно быть:
[0] => 60000 руб
[1] =>
[2] =>
[3] => до
[4] => 60000 | |
|
|
|