[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Распарсить содержание всех <td>
artlayers
Приветствую!
Есть html файл.
Он содержит в себе примерно такое:
<tr align=right><td>1</td><td class=msdate>2011.02.08 00:00</td>
<td>
что-то</td><td>1</td><td class=mspt>10.00</td>
<td
style="mso-number-format:0\.00000;">что-то</td>
<td
style="mso-number-format:0\.00000;" align=right>что-то</td>
<td
style="mso-number-format:0\.00000;" align=right>что-то</td>
<td
colspan=2></td></tr>

Мне необходимо считать файл и извлечь все что находится внутри тегов <td>. Когда в тексте имеется <td>что-то</td>, то "что-то" считать не проблема, регулярку написал. Но, если <td class=msdate>что-то</td>, то есть классы стили у td еще имеется, уже не работает. Вот эту проблему не могу решить.



Спустя 56 минут, 53 секунды (14.07.2011 - 11:46) webmonkey написал(а):
Измените <td> в RegExp на <td *>.

Спустя 1 минута, 25 секунд (14.07.2011 - 11:48) neadekvat написал(а):
Цитата (webmonkey @ 14.07.2011 - 12:46)
Измените <td> в RegExp на <td *>.

Ага, и он возьмет реально все, в том числе и другие td. Нужно как минимум *? А еще лучше ^> или ограничить набор символов перечислением.

Спустя 5 минут, 45 секунд (14.07.2011 - 11:53) webmonkey написал(а):
neadekvat
Насколько я помню, так нагло себя ведет только RegExp в JavaScript.

Спустя 4 минуты, 33 секунды (14.07.2011 - 11:58) neadekvat написал(а):
Цитата (webmonkey @ 14.07.2011 - 12:53)
Насколько я помню, так нагло себя ведет только RegExp в JavaScript.

Нэ, жадность - она и есть жадность.

А собственно кто мешает попробовать? У меня сейчас проблемы с этим.

Спустя 3 минуты, 33 секунды (14.07.2011 - 12:01) Winston написал(а):
Жадность спокойно можно пресечь добавлением модификатора U в регекспе smile.gif

Спустя 2 минуты, 47 секунд (14.07.2011 - 12:04) quickxyan написал(а):

тут был написан бред :)


можно как-то типа такого попробовать! ну или что-то похожее :)

Спустя 1 минута, 42 секунды (14.07.2011 - 12:06) Winston написал(а):
quickxyan
Ты шо написал? blink.gif

Спустя 51 секунда (14.07.2011 - 12:07) neadekvat написал(а):
Цитата (PHPprogramer @ 14.07.2011 - 13:01)
Жадность спокойно можно пресечь добавлением модификатора U в регекспе

Я лично предпочитаю в каждом случаи конкретно указывать это. Мне так проще. Хотя регэкспы - такая тема шоппц.

Цитата (quickxyan @ 14.07.2011 - 13:04)
можно как-то типа такого попробовать! ну или что-то похожее smile.gif

Вот в тему про ппц.
Не зря я посоветовал сначала попробовать.

Спустя 59 секунд (14.07.2011 - 12:08) quickxyan написал(а):
ну типа условия для регулярки smile.gif
удалить, чтоб не позорится. я с головы написал - хотел смысл донести!

Спустя 6 минут, 18 секунд (14.07.2011 - 12:14) Winston написал(а):
artlayers
Цитата (artlayers @ 14.07.2011 - 10:49)
если <td class=msdate>что-то</td>, то есть классы стили у td еще имеется, уже не работает

Покажи как ты написал. У меня регулярка получилась крайне простой smile.gif

Спустя 5 минут, 12 секунд (14.07.2011 - 12:19) quickxyan написал(а):
PHPprogramer
та я удалил smile.gif ну я в них не так уж силен.

Спустя 3 минуты, 10 секунд (14.07.2011 - 12:22) Winston написал(а):
quickxyan
Цитата (PHPprogramer @ 14.07.2011 - 12:14)
Покажи как ты написал.

Это к artlayers относится smile.gif

Спустя 36 минут, 4 секунды (14.07.2011 - 12:58) alex12060 написал(а):
маски, маски, все решают маски :)


$str = '<td>saf</td>';
$str1 = '<td class="ssdg">saf</td>';

preg_match('#<td(.*)>(.*)<\/td>#iu', $str, $new);

var_dump($new);

die();


Подставь 2 разные переменные и посмотри, что меняется.

Спустя 10 минут, 32 секунды (14.07.2011 - 13:09) Winston написал(а):
alex12060
У меня шаблон получился немного короче smile.gif
Кстати твой код не совсем правильно будет работать на коде ТС

Спустя 11 минут, 19 секунд (14.07.2011 - 13:20) alex12060 написал(а):
PHPprogramer

Вай?

Спустя 4 минуты, 21 секунда (14.07.2011 - 13:25) neadekvat написал(а):
Цитата (alex12060 @ 14.07.2011 - 14:20)
Вай?

Уай.
Пиши лучше по-русски, ок?

Спустя 16 секунд (14.07.2011 - 13:25) Winston написал(а):
Цитата (alex12060 @ 14.07.2011 - 13:20)
Вай

Протестируй свою регулярку на коде ТС, и увидишь, что выбираются не все значения между <td>....</td> smile.gif

Спустя 11 минут, 26 секунд (14.07.2011 - 13:36) alex12060 написал(а):
Ну это так было, для понятия)
А с его текстом конкретно тут нужно мазохистскую регулярку писать...

Спустя 1 минута, 9 секунд (14.07.2011 - 13:38) Winston написал(а):
Цитата (alex12060 @ 14.07.2011 - 13:36)
А с его текстом конкретно тут нужно мазохистскую регулярку писать...

Зачем? У меня получилась даже короче твоей smile.gif

Спустя 3 часа, 13 минут, 52 секунды (14.07.2011 - 16:51) killer8080 написал(а):
вот мой вариант :)
$str = '<td class="ssdg">saf</td>
<td class="5">
5
</td>
<td class="6">6</td>
<td>ttt</td>
'
;

preg_match_all('#<td[^>]*>(.*)</td>#iusU', $str, $match);

echo '<pre>', htmlspecialchars(print_r($match,1)), '</pre>';

Спустя 4 минуты, 44 секунды (14.07.2011 - 16:56) Winston написал(а):
Ну раз уж все хвастают, то и я покажу свой код :)
Свернутый текст
$str = '<tr align=right><td>1</td><td class=msdate><date>2011.02.08 00:00</date></td>
<td>что-то</td><td>1</td><td class=mspt>10.00</td>
<td style="mso-number-format:0\.00000;">привет/<span>что-тоолоо</span></td>
<tr><td style="mso-number-format:0\.00000;" align=right><b>что-то</b></td></tr>
<td style="mso-number-format:0\.00000;" align=right>что-то</td>
<td colspan=2></td></tr>'
;

preg_match_all("#<td.*>(.*)</td>#isuU", $str, $matches);

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

Спустя 37 минут, 55 секунд (14.07.2011 - 17:34) killer8080 написал(а):
PHPprogramer
всё таки мой вариант правильней, посмотри что выводит твой пример, вместо 1, захватывает <td>1 :)
Если бы ты вывод делал так, то увидел бы сразу ;)
echo '<pre>', htmlspecialchars(print_r($match,1)), '</pre>';

Спустя 1 час, 40 минут, 23 секунды (14.07.2011 - 19:14) Winston написал(а):
killer8080
Офигеть, ну молоток заметил +1
Код подправил немного.

Спустя 12 минут, 9 секунд (14.07.2011 - 19:27) killer8080 написал(а):
PHPprogramer
"#<td.*>(.*)</td>#isuU"
согласен, так то же работает, в принципе в корректном html символа ">" внутри тега быть не может :)

artlayers
и ещё, модификатор u нужен только если текст в кодировке utf-8, если нет, то нужно его убрать.

Спустя 1 час, 10 минут, 7 секунд (14.07.2011 - 20:37) Winston написал(а):
Цитата (killer8080 @ 14.07.2011 - 19:27)
в принципе

Не в принципе, а так оно и есть smile.gif

Спустя 36 минут, 9 секунд (14.07.2011 - 21:13) artlayers написал(а):
Большое спасибо всем! Не ожидал столько вариантов :) Но есть еще проблемка, регулярка спотыкается на
<td></td>

И не считывает вообще ничего. Если убрать знак № то все отлично.

Спустя 3 минуты, 42 секунды (14.07.2011 - 21:17) Winston написал(а):
Цитата (artlayers @ 14.07.2011 - 21:13)
<td>№</td>

Очень странно, так не должно быть.
И у меня все нормально.
Дайте тот участок код который вы парсите.

Спустя 2 минуты, 43 секунды (14.07.2011 - 21:19) artlayers написал(а):
<table width=820 cellspacing=1 cellpadding=3 border=0>
<tr
bgcolor="#C0C0C0" align=right><td></td><td>time</td><td>type</td><td>ord</td><td>vol</td><td>pr</td><td>t/r</td><td></td><td>pr</td><td>b/l</td></tr>

Спустя 2 минуты, 28 секунд (14.07.2011 - 21:22) Winston написал(а):
У меня все работает, вот то, что нашло
Свернутый текст
Цитата
Array
(
    [0] => Array
        (
            [0] => <td>№</td>
            [1] => <td>time</td>
            [2] => <td>type</td>
            [3] => <td>ord</td>
            [4] => <td>vol</td>
            [5] => <td>pr</td>
            [6] => <td>t/r</td>
            [7] => <td></td>
            [8] => <td>pr</td>
            [9] => <td>b/l</td>
        )

    [1] => Array
        (
            [0] => №
            [1] => time
            [2] => type
            [3] => ord
            [4] => vol
            [5] => pr
            [6] => t/r
            [7] =>
            [8] => pr
            [9] => b/l
        )
)

Спустя 3 минуты, 16 секунд (14.07.2011 - 21:25) artlayers написал(а):
o_O
у меня:
Array
(
[0] => Array
(
)

[1] => Array
(
)

)

в чем проблему искать?

Спустя 7 минут, 23 секунды (14.07.2011 - 21:32) Winston написал(а):
Кодировка файла какая? Если windows-1251 то убери модификатор u

Спустя 1 минута, 50 секунд (14.07.2011 - 21:34) artlayers написал(а):
В ютф перевел все отлично стало. Спасибо огромное!
Быстрый ответ:

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