Есть 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.
Насколько я помню, так нагло себя ведет только 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 в регекспе
Спустя 2 минуты, 47 секунд (14.07.2011 - 12:04) quickxyan написал(а):
тут был написан бред :)
можно как-то типа такого попробовать! ну или что-то похожее :)
Спустя 1 минута, 42 секунды (14.07.2011 - 12:06) Winston написал(а):
quickxyan
Ты шо написал?
Ты шо написал?
Спустя 51 секунда (14.07.2011 - 12:07) neadekvat написал(а):
Цитата (PHPprogramer @ 14.07.2011 - 13:01) |
Жадность спокойно можно пресечь добавлением модификатора U в регекспе |
Я лично предпочитаю в каждом случаи конкретно указывать это. Мне так проще. Хотя регэкспы - такая тема шоппц.
Цитата (quickxyan @ 14.07.2011 - 13:04) |
можно как-то типа такого попробовать! ну или что-то похожее |
Вот в тему про ппц.
Не зря я посоветовал сначала попробовать.
Спустя 59 секунд (14.07.2011 - 12:08) quickxyan написал(а):
ну типа условия для регулярки
удалить, чтоб не позорится. я с головы написал - хотел смысл донести!
удалить, чтоб не позорится. я с головы написал - хотел смысл донести!
Спустя 6 минут, 18 секунд (14.07.2011 - 12:14) Winston написал(а):
artlayers
Цитата (artlayers @ 14.07.2011 - 10:49) |
если <td class=msdate>что-то</td>, то есть классы стили у td еще имеется, уже не работает |
Покажи как ты написал. У меня регулярка получилась крайне простой
Спустя 5 минут, 12 секунд (14.07.2011 - 12:19) quickxyan написал(а):
PHPprogramer
та я удалил ну я в них не так уж силен.
та я удалил ну я в них не так уж силен.
Спустя 3 минуты, 10 секунд (14.07.2011 - 12:22) Winston написал(а):
quickxyan
Цитата (PHPprogramer @ 14.07.2011 - 12:14) |
Покажи как ты написал. |
Это к artlayers относится
Спустя 36 минут, 4 секунды (14.07.2011 - 12:58) alex12060 написал(а):
маски, маски, все решают маски :)
Подставь 2 разные переменные и посмотри, что меняется.
$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
У меня шаблон получился немного короче
Кстати твой код не совсем правильно будет работать на коде ТС
У меня шаблон получился немного короче
Кстати твой код не совсем правильно будет работать на коде ТС
Спустя 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>
Спустя 11 минут, 26 секунд (14.07.2011 - 13:36) alex12060 написал(а):
Ну это так было, для понятия)
А с его текстом конкретно тут нужно мазохистскую регулярку писать...
А с его текстом конкретно тут нужно мазохистскую регулярку писать...
Спустя 1 минута, 9 секунд (14.07.2011 - 13:38) Winston написал(а):
Цитата (alex12060 @ 14.07.2011 - 13:36) |
А с его текстом конкретно тут нужно мазохистскую регулярку писать... |
Зачем? У меня получилась даже короче твоей
Спустя 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 :)
Если бы ты вывод делал так, то увидел бы сразу ;)
всё таки мой вариант правильней, посмотри что выводит твой пример, вместо 1, захватывает <td>1 :)
Если бы ты вывод делал так, то увидел бы сразу ;)
echo '<pre>', htmlspecialchars(print_r($match,1)), '</pre>';
Спустя 1 час, 40 минут, 23 секунды (14.07.2011 - 19:14) Winston написал(а):
killer8080
Офигеть, ну молоток заметил +1
Код подправил немного.
Офигеть, ну молоток заметил +1
Код подправил немного.
Спустя 12 минут, 9 секунд (14.07.2011 - 19:27) killer8080 написал(а):
PHPprogramer
artlayers
и ещё, модификатор u нужен только если текст в кодировке utf-8, если нет, то нужно его убрать.
"#<td.*>(.*)</td>#isuU"
согласен, так то же работает, в принципе в корректном html символа ">" внутри тега быть не может :) artlayers
и ещё, модификатор u нужен только если текст в кодировке utf-8, если нет, то нужно его убрать.
Спустя 1 час, 10 минут, 7 секунд (14.07.2011 - 20:37) Winston написал(а):
Цитата (killer8080 @ 14.07.2011 - 19:27) |
в принципе |
Не в принципе, а так оно и есть
Спустя 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 написал(а):
В ютф перевел все отлично стало. Спасибо огромное!