[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите с регулярным выражением
GFox
Здравствуйте, помогите, пожалуйста, составить регулярное выражение для вытаскивания строки и последующей разбивкой её по массивам.

Вот строка в html документе:

<tr><td align=right>Производственный:</td><td><font color=#009900><b>18</b></font> (100857.675) <font style='font-size:8px;color:#809980'>+4717</font></td></tr>


На выходе нужно получить:
$result[0] 18
$result[1] 100857.675 (в данном случае игнорируем скобки)

Пробовал сделать так:
preg_match ('|<font color=#009900><b>(\d+.+)\((.*?)\)|', $html, $e);

маячком для парсинга был указатель цвета (#009900), но, как выявилось при тестировании, при некоторых условиях у некоторых пользователей данный цвет применяется от 1 до 3 раз, в результате в переменную попадают не те данные.

Самым оптимальным было бы использовать слово для поиска строки - Производственный:, но у меня никак не получается это сделать, на выходе массивы пустые(

Если не трудно, помогите.






Спустя 38 минут, 15 секунд (31.03.2010 - 12:13) DedMorozzz написал(а):
preg_match_all("#font color=#009900><b>(.*)<\/b></font> ((.*))#", $result, $matches);
$res=$matches[1][0];
$res2=$matches[2][0];

так? (ща у ся проверю)

Спустя 22 минуты, 8 секунд (31.03.2010 - 12:35) DedMorozzz написал(а):
$result="<tr><td align=right>Производственный:</td><td><font color=#009900><b>18</b></font> (100857.675) <font style='font-size:8px;color:#809980'>+4717</font></td></tr>";

preg_match_all("#<b>(.*)</b></font> \(([^)]+)#", $result, $matches);
echo $matches[1][0]."<br>";
echo $matches[2][0];

от, чуток подровнял. Выводит всё адекватно

Спустя 2 часа, 16 минут, 28 секунд (31.03.2010 - 14:51) GFox написал(а):
DedMorozzz, спасибо большое, я наверно не совсем точно описал задау.

На странице, для парсинга, много записей, которые находятся между тегами <b>...</b></font>, нужно что бы в регулярке указывалость что брать данные только из той строки, в которой есть надпись "Производственный:".

В Вашу регулярку можно как то добавить это?

Спустя 6 минут, 48 секунд (31.03.2010 - 14:58) DedMorozzz написал(а):
тю, конечно можно. Причём делаеться это 1м действием. 99% уже написано. 1% поразмысли куда и зачем написать.

Спустя 3 минуты, 5 секунд (31.03.2010 - 15:01) GFox написал(а):
preg_match_all("#(Производственный)<b>(.*)</b></font> \(([^)]+)#", $result, $matches);

так?)

я пытался разобраться в регулярных выражениях, но никак не получается(

Спустя 2 минуты, 20 секунд (31.03.2010 - 15:03) GFox написал(а):
и, если мы точно знаем, что искомая строка одна, есть ли смысл использовать preg_match_all ? может быть искать до первого совпадения(preg_match)?

опять таки, пока плохо в них разбираюсь, логически понимаю порядок действий, но написать это не могу)

Спустя 2 минуты, 29 секунд (31.03.2010 - 15:06) twin написал(а):
preg_match_all("#Производственный:[^b]+b>([^<]+?)<.+\(([^\)]+?)\)#ui", $result, $matches);
echo $res = $matches[1][0], '<br>';
echo $res2 = $matches[2][0];

Спустя 1 минута, 1 секунда (31.03.2010 - 15:07) DedMorozzz написал(а):
...
preg_match_all("#Производственный:.+<b>(.*)</b></font> \(([^)]+)#", $result, $matches);

. - это любой символ.
+ - повторения
для начала внимательно читаеться синтаксис регулярок. А не надеясь, что найдёться 2 деда мороза, которые возьмут и напишут smile.gif
ЗЫ: Чёрт, вот он 2й добрый Дед Мороз)))) в лице twin`a

Спустя 14 минут, 57 секунд (31.03.2010 - 15:22) GFox написал(а):
DedMorozzz, понимаю, самому не приятно делать не понимая, и кого то постоянно дергать:(

Сайт сделал, а без рейтинга он мало кому нужен, вот и приходится фарсировать.

Спустя 38 секунд (31.03.2010 - 15:23) GFox написал(а):
twin, DedMorozzz Большое Вам спасибо:)
Быстрый ответ:

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