Автор Тема: почти xml...  (Прочитано 3904 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн CGVictor

  • теперь местный
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2511
  • +0/-0
  • 2
    • Просмотр профиля
    • http://cg.net.ru
почти xml...
« : 25 Декабря 2003, 16:37:30 »
Задача, собственно, следующая:

Необходимо получить из текста все вхождения вида:

<$starttag>$somecontent<$endtag>


$starttag и $endtag известны.
$somecontent надо получить.

Вхождений может быть больше одного.

В регулярных я не силен, так что очень желателен "рассказ с показом"... Ну обьясните please...
И, если возможно, с уклоном в PHP.

Заранее спасибо.
LJ: Backslashed life (rss)

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
почти xml...
« Ответ #1 : 25 Декабря 2003, 18:14:08 »

$txt 
"<starttag> some content <endtag> 
<st_tag> second <end_ag> 
<starttag> next content <endtag> "
;
$start_tag = \'starttag\';
$end_tag = \'endtag\';
preg_match_all("~(?<=<".$start_tag.">).+?(?=<".$end_tag.">)~si", $txt, $m);
print_r($m);
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
почти xml...
« Ответ #2 : 25 Декабря 2003, 18:16:49 »
похоже у форума какая-то баго-фича : в комбинацию "знак больше и скобка" он  вставляет пробел.
>) - должно быть везде без пробела между ними
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Yukko

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1586
  • +0/-0
  • 0
    • Просмотр профиля
    • http://estrabota.com.ua
почти xml...
« Ответ #3 : 25 Декабря 2003, 18:20:12 »
на вскидку:
$content = "somecontent
   somecontent1
   somecontent2";
preg_match_all("/([^<>]*)/i", $content, $matches);
print_r($matches);

[^<>]* означает что совпадут любые символы, кроме < и >

долго писал... Макс ответил :)
работа в Украине

Оффлайн Yukko

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1586
  • +0/-0
  • 0
    • Просмотр профиля
    • http://estrabota.com.ua
почти xml...
« Ответ #4 : 25 Декабря 2003, 18:26:18 »
Макс
я бы .+? не писал,
работа в Украине

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
почти xml...
« Ответ #5 : 25 Декабря 2003, 18:39:11 »
Yukko
предложи альтернативу
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Yukko

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1586
  • +0/-0
  • 0
    • Просмотр профиля
    • http://estrabota.com.ua
почти xml...
« Ответ #6 : 25 Декабря 2003, 18:44:32 »
Макс
все зависит от того, что у него будет между тегами :)

Цитировать
Макс:
предложи альтернативу

[^<>]+
работа в Украине

Оффлайн CGVictor

  • теперь местный
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2511
  • +0/-0
  • 2
    • Просмотр профиля
    • http://cg.net.ru
почти xml...
« Ответ #7 : 26 Декабря 2003, 12:07:43 »
А если между тегами будут еще и другие подобные конструкции, типа:

text

???
LJ: Backslashed life (rss)

Оффлайн Yukko

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1586
  • +0/-0
  • 0
    • Просмотр профиля
    • http://estrabota.com.ua
почти xml...
« Ответ #8 : 26 Декабря 2003, 16:27:00 »
работа в Украине

Оффлайн CGVictor

  • теперь местный
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2511
  • +0/-0
  • 2
    • Просмотр профиля
    • http://cg.net.ru
почти xml...
« Ответ #9 : 26 Декабря 2003, 16:38:07 »
Там люди сошлись на парсере ХМЛ. Я, в принципе, тоже на другое и не надеялся.
Спасибо.
LJ: Backslashed life (rss)

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28