[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Начало - регулярные выражения
gidrosoldat
Алоха, друзья!
Раньше глядя на регулярное выражение у меня проскакивала мысль, что это п...ц полный и писать программу непонятными символами могут только чокнутые ботаники. Потихоньку разбираясь, в регулярке я понял, что не все так страшно. Тут, оказывается, есть своя логика и определенная закономерность. Все это привело меня к мысли - либо регурляки выглядят сложнее чем есть на самом деле, либо я уже сам стал немного того, если понимаю этот птичий язык )
Вообщем, ближе к делу - конкретный случай, который у меня вызвал затруднение.
Есть строка:
Электрик - диагност - от 45000 до 60000 рублей.
Она может быть такого типа:
Электрик - диагност от 45000 до 60000 рублей.
или такого:
Электрик от 45000 до 60000 рублей.
или такого:
Электрик-бла-бла-бла ........ бла от 45000 до 60000 рублей.
Мне нужно выдрать: профессию, и зарплату (две цифры).
Я делаю так:
....
if($text = preg_match('#(.+)(\s-\s|\s)от\s([0-9]+)\sдо\s([0-9]+)\sрублей$#ui', $rss_item['title'], $salary_string, PREG_OFFSET_CAPTURE))
{
var_dump($salary_string);
$valid_item['salary_min'] = (int)$salary_string[3][0];
$valid_item['salary_max'] = (int)$salary_string[4][0];
$valid_item['accupation'] = $salary_string[1][0];
}
....

Получаю:
array(4) {
["salary_min"]=>
int(45000)
["salary_max"]=>
int(60000)
["accupation"]=>
string(37) "Электрик - диагност -"
}

Увы не получается - во вторых скобках (\s-\s|\s) все время присваивается вариант \s (пробел) даже если в строке в этом месте находятся пробел\тире\пробел (\s-\s). В accupation добавляется пробел и тире. Вообщем помогите составить выражение.
П.С. Раньше никогда регуляркой не пользовался, так что сильно ногами не бейте.



Спустя 5 часов, 20 минут, 45 секунд (29.05.2011 - 13:33) Winston написал(а):
Из сплошного текста будет очень трудно выдрать нужную профессию, нужно будет наверное составлять словарь профессий (это не разумно). Мне больше ничего в голову не приходи как объединять про и зп в группы...
Вот что у меня получилось
$str = "<span id='group'><span id='prof'>Электрик - диагност</span> - от <span id='salary'>45000 до 60000</span> рублей</span>
Она может быть такого типа:
Электрик - диагност от 45000 до 60000 рублей.
или такого:
Электрик от 45000 до 60000 рублей.
или такого:
<span id='group'><span id='prof'>Электрик-бла-бла-бла</span> ....... бла- от <span id='salary'>400 до 6500</span> рублей</span>
Электрик-бла-бла-бла ........ бла от 400 до 6000 рублей."
;

preg_match_all("#.*<span id=(\"|')group\\1>.*(<span id=(\"|')prof\\3>(.*)</span>).*(<span id=(\"|')salary\\6>(.*)</span>).*</span>.*#i", $str, $all);

echo '<pre>';
print_r($all);
echo '</pre>';



Цитата (gidrosoldat @ 29.05.2011 - 08:12)
П.С. Раньше никогда регуляркой не пользовался, так что сильно ногами не бейте.

За такие слова быстрее побьют чем если бы ты просто попросил помощи :)

Спустя 15 минут, 54 секунды (29.05.2011 - 13:49) Winston написал(а):
Или так, чтобы выбрать max и min цену
preg_match_all("#.*<span id=(\"|')group\\1>.*(<span id=(\"|')prof\\3>(.*)</span>).*(<span id=(\"|')salary\\6>.*?(\d+)\s+?.*\s+?(\d+).*?</span>).*</span>.*#i", $str, $all);

Спустя 4 минуты, 29 секунд (29.05.2011 - 13:54) gidrosoldat написал(а):
Цитата (PHPprogramer @ 29.05.2011 - 10:33)
За такие слова быстрее побьют чем если бы ты просто попросил помощи  smile.gif

Почему? Наоборот! Я сразу поясняю всем, что мои знания поверхностны и объяснять лучше не заумными словами, а на пальцах.
Вариант со спанами отпадает, ибо я сам не генерирую эту строку а получаю конечный вариант. От этого стараюсь плясать дальше.

Спустя 2 минуты, 28 секунд (29.05.2011 - 13:56) Winston написал(а):
Откуда ты берешь эти данные? Парсишь страницу ?

Спустя 4 минуты, 1 секунда (29.05.2011 - 14:00) gidrosoldat написал(а):
RSS лента/отдельный итем/заголовок. Внутри заголовка просто строка, отдельные слова никак не выделены.

Спустя 4 минуты, 21 секунда (29.05.2011 - 14:04) Winston написал(а):
Можешь дать ее адрес?

Спустя 6 минут, 56 секунд (29.05.2011 - 14:11) gidrosoldat написал(а):
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.