Регулярные выражения вырезать нужное

  • Автор темы CaNaBiS_XoR
  • Дата начала

CaNaBiS_XoR

Guest
Регулярные выражения вырезать нужное

Привет
Есть кусок html кода

<tr><td class=txt>Голова</td><td class=txt>Слот свободен</b></td></tr>
<tr><td class=txt>Левая рука</td><td class=txt>Слот занят предметом: <b>Гранатомёт&nbsp;|&nbsp;<a href=/home.items.php?take_off=left_hand>Освободить слот</a></b></td></tr>
<tr><td class=txt>Правая рука</td><td class=txt>Слот занят предметом: <b>Гранатомёт&nbsp;|&nbsp;<a href=/home.items.php?take_off=right_hand>Освободить слот</a></b></td></tr>
<tr><td class=txt>Корпус</td><td class=txt>Слот свободен</b></td></tr>
<tr><td class=txt>Спина</td><td class=txt>Слот свободен</b></td></tr>
<tr><td class=txt>Пояс</td><td class=txt>Слот занят предметом: <b>РГД-5&nbsp;|&nbsp;<a href=/home.items.php?take_off=belt>Освободить слот</a></b></td></tr>
<tr><td class=txt>Ноги</td><td class=txt>Слот свободен</b></td></tr>
<tr><td class=txt>(Транспорт)</td><td class=txt>Слот свободен</b></td></tr>
<tr><td class=txt colspan=2>Суммарный вес: 23 (+1)<br>
<br>

Как вырезать например:
Голова Слот свободен
Левая рука Слот занят предметом: Гранатомёт
и так делее ...

Статьи о ругулярных выражениях читал пытался с 17 часов но так ничего и не вышло то кучу лишнего навырезает то че нибудь другое .
Если это возможно помогите не могу правильно сформировать рег.выражение для этой задачи
Заранее благодарен
 

untied

Сдвинутый новичок
Используй XML-функции PHP для парсинга тегов.
 

SelenIT

IT-лунатик :)
Есть кусок html кода

<tr><td class=txt>Голова</td><td class=txt>Слот свободен</b></td></tr>
<tr><td class=txt>Левая рука</td><td class=txt>Слот занят предметом: <b>Гранатомёт .....

Как вырезать например:
Голова Слот свободен
Левая рука Слот занят предметом: Гранатомёт
и так делее ...
[m]strip_tags[/m]? :)
 

CaNaBiS_XoR

Guest
strip_tags

да я так делал но это не весь код что я написал и дополнительно мне нужны будут url ы из кода
Я думаю выражениями будет лучше сделать это. Проблема в том что не могу нормально сформировать выражение скока не пробовал все криво))
 

Wicked

Новичок
Чтобы освоить регулярные выражения, обычно уходит поболее времени, чем "с 17 часов" :) Я бы порекомендовал все таки добить эту задачу самому до конца, это даст тебе некоторый опыт.
 

uchenik

Новичок
Если urlы нужно вычленить из приведенного кода, то задача решается следующим образом:

вычленяем нужную информацию из html
PHP:
preg_match_all("/=txt>([^<]+)<\/td>[^>]+>([^\/]+)(?:<a\s+href=([^>]+)>[^<]+)?<\//s", $a, $arr);
очищаем фразы типа "Слот занят предметом: <b>Гранатомёт |" от ненужных символов "</b>", "</b>", "|"
PHP:
$arr[2] = preg_replace(array("'\|'", "'<b>'", "'</b>'"), "", $arr[2]);
распечатываем вырезанную регулярками информацию
PHP:
print_r($arr[1]);
echo '<p>';
print_r($arr[2]);
echo '<p>';
print_r($arr[3]);
Прошу автора написать как пример работает в его тексте.
 

Frol

Новичок
да и вообще это похоже на тыренье контента с какого-нибудь БК.

-~{}~ 10.01.05 02:36:

uchenik
эта фраза описывает твое поведение.
 

uchenik

Новичок
Мое поведение говорит о том, что сейчас я учу регулярные выражения в php и не против лишний раз попрактиковатся.

Тем более, что поставленую задачу никто здесь решать не будет.
 

Frol

Новичок
хаха.
здрасте.
решать задачу должен автор.
и учить он должен регулярные выражени также, как и ты.

иначе с такими темпами форум будет наполнен людьми, которые умеют делать только Copy & Paste.
 

uchenik

Новичок
Автор оригинала: Frol
хаха.
здрасте.
решать задачу должен автор.
и учить он должен регулярные выражени также, как и ты.

иначе с такими темпами форум будет наполнен людьми, которые умеют делать только Copy & Paste.
Согласен, в этом я не прав.
 

CaNaBiS_XoR

Guest
))) Да я учу ))
Еще одно чем лучше пользоваться preg_match или ereg ?
 

SiMM

Новичок
... бинарнобезопаснее и более функциональнее (и, если не ошибаюсь, не имеют проблем с локалью).
 

CaNaBiS_XoR

Guest
Кто нибудь может объяснить подробно почему именно так сформированы рег выражения млин скока не пытаюсь ничего не выходит с понимание сего хотя объем информации не большеой:
preg_match_all("/=txt>([^<]+)<\/td>[^>]+>([^\/]+)(?:<a\s+href=([^>]+)>[^<]+)?<\//s", $a, $arr);
Плиз подробней)
 

CaNaBiS_XoR

Guest
Да читал я все это и даже распечатал для наглядности
Можеш так словами объяснить))
 

SiMM

Новичок
CaNaBiS_XoR, а самому по этому материалу врубиться слабо?
1. =txt> без комментариев
2. ([^<]+) не менее одного символа, отличного от <
3. <\/td> без комментариев
4. [^>]+ не менее одного символа, отличного от >
5. > не вижу смысла комментировать
6. ([^\/]+) не менее одного символа, отличного от / (довольно "дикое" условие, зачем оно здесь - мне неизвестно).
7. (?:<a\s+href=([^>]+)>[^<]+)? - (?:...)? от нуля до 1го повтора, без запоминания в "кармане"
7.1 <a no comments
7.2 \s+ не меньше одного пробела
7.3 href= no comments
7.4 ([^>]+) см. п. 4
7.5 > no comments
7.6 [^<]+ см. п. 2
8. <\/ no comments
s - single line

П.п. 2, 6, 7.4 помимо прочего попадают в "карман"
Если после этого у тебя появляются вопросы - забей на регулярники, иди учить строковые функции ;)
 
Сверху