Автор Тема: Регулярные выражения: поиск парных тегов  (Прочитано 6020 раз)

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

Оффлайн Daiz13

  • наблюдатель
  • Постоялец
  • ***
  • Сообщений: 150
  • +0/-0
  • 2
    • Просмотр профиля
    • http://rg.com.ua/
Написал такую ф-ю:


function getTagStr($content$tag$b_left="["$b_right="]"$b_closer="/") {
    
$b_left   preg_quote ($b_left);
    
$b_right  preg_quote ($b_right);
    
$b_closer preg_quote ($b_closer);
    
$patern = \'/\'.$b_left.$tag.$b_right.\'(.*)\'.$b_left.$b_closer.$tag.$b_right.\'/siU\';
    preg_match ( $patern , $content , $outdata);
    return $outdata[1];
}

// пример:
$body = getTagStr($content, "custom", $b_left="@", $b_right="@", $b_closer="")


Пример позволяет получить часть текста заключенную в @custom@.

А как ее переделать чтобы получать масив строк заключенных в произвольные теги?

Тоесть задаем только метки тэгов и ищем все парные тэги.

Оффлайн Tronyx

  • Модератор
  • Ветеран
  • *****
  • Сообщений: 826
  • +0/-0
  • 2
    • Просмотр профиля
Регулярные выражения: поиск парных тегов
« Ответ #1 : 01 Августа 2002, 11:32:57 »
preg_match_all();
С уважением, Владимир Гончаренко - COPI# 93
Ролевая онлайн игра

Оффлайн Daiz13

  • наблюдатель
  • Постоялец
  • ***
  • Сообщений: 150
  • +0/-0
  • 2
    • Просмотр профиля
    • http://rg.com.ua/
Регулярные выражения: поиск парных тегов
« Ответ #2 : 01 Августа 2002, 14:19:30 »
Цитировать
preg_match_all();


Это итак ясно, проблема в том чтобы найти вхождения всех парных тэгов, а не какого н-дь определенного.

Оффлайн AlieN

  • Абыр!=)
  • Ветеран
  • *****
  • Сообщений: 1315
  • +0/-1
  • 2
    • Просмотр профиля
Регулярные выражения: поиск парных тегов
« Ответ #3 : 01 Августа 2002, 15:50:20 »
Daiz13
я попытался поэксперементировать, немного изменив твою ф-ция - не удалось...
Скорее всего надо писать парсер
The Chemical Brothers - Hey Boy Hey Girl (User Friendly Mix)
Peter Presta pres - Set Sail(Peter Presta Apple Jaxx Dub) She S.Sunshine Feat Mila - Bring The Beat Back (Club Mix) Jerry Ropero - Home Alone (Dub Mix)

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Регулярные выражения: поиск парных тегов
« Ответ #4 : 01 Августа 2002, 15:54:34 »
Ну, так это...
впесто слова $tag надо, наверное, написать .*?

Оффлайн AlieN

  • Абыр!=)
  • Ветеран
  • *****
  • Сообщений: 1315
  • +0/-1
  • 2
    • Просмотр профиля
Регулярные выражения: поиск парных тегов
« Ответ #5 : 01 Августа 2002, 16:16:20 »
RomikChef
допусти текст вот такой:
[tag1]blabla1[tag2]blabla2[/tag2]blabla3[/tag1]
Что в итоге(с твои изменением) получим вот такие элементы массива:
1)blabla1[tag2]blabla2[/tag2]blabla3
2)blabla1[tag2]blabla2
3)blabla1
4)blabla2
5)blabla3
6)blabla2[/tag2]blabla3

Спрашивается: правильно ли?
The Chemical Brothers - Hey Boy Hey Girl (User Friendly Mix)
Peter Presta pres - Set Sail(Peter Presta Apple Jaxx Dub) She S.Sunshine Feat Mila - Bring The Beat Back (Club Mix) Jerry Ropero - Home Alone (Dub Mix)

Оффлайн GotZfild

  • Универсал
  • Старожил
  • ****
  • Сообщений: 456
  • +0/-0
  • 2
    • Просмотр профиля
    • http://myphp.dem.ru
Регулярные выражения: поиск парных тегов
« Ответ #6 : 01 Августа 2002, 17:24:59 »
preg_match_all("!\\\\[(.+)\\\\](.*)\\\\[/\\\\\\\\1\\\\]!U"$content$outdata);
Только это не ищет вложенные теги, их придется выковыривать рекурсией.
После трех дней без программирования жизнь становится бессмысленной.

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Регулярные выражения: поиск парных тегов
« Ответ #7 : 01 Августа 2002, 18:01:26 »
Во! Уже ближе к телу!

Оффлайн Ardzhan

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 205
  • +0/-0
  • 0
    • Просмотр профиля
    • http://ardzhan.km.ru
Регулярные выражения: поиск парных тегов
« Ответ #8 : 02 Августа 2002, 14:04:32 »
Вчера вводил такую фишку на свой форум... Реализовал так:
$msg=preg_replace("/\\[B\\](.*?)\\[\\/B\\]/i", "$1", $msg);
$msg=preg_replace("/\\[I\\](.*?)\\[\\/I\\]/i", "$1", $msg);
Знак "?" борется именно с
[tag1]blabla1[tag2]blabla2[/tag2]blabla3[/tag1]
и такого как blabla1[tag2]blabla2[/tag2]blabla3
 не вылетает... И со вложенными тегами работает, без проблем.

Оффлайн Ardzhan

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 205
  • +0/-0
  • 0
    • Просмотр профиля
    • http://ardzhan.km.ru
Регулярные выражения: поиск парных тегов
« Ответ #9 : 02 Августа 2002, 14:08:04 »
Вопрос вдогонку, может кто знает...
Цитировать
(.*?)
- это допускает все символы, кроме перевода строки... Как сделать, чтоб допускался перевод строки...

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Регулярные выражения: поиск парных тегов
« Ответ #10 : 02 Августа 2002, 16:09:50 »
там модификатор нужно прописать. Или m или s, точно не помню
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Ardzhan

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 205
  • +0/-0
  • 0
    • Просмотр профиля
    • http://ardzhan.km.ru
Регулярные выражения: поиск парных тегов
« Ответ #11 : 02 Августа 2002, 18:44:52 »
Макс
Проверил все ок... Как ты и говорил модификатор s ! Спасибо.

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Регулярные выражения: поиск парных тегов
« Ответ #12 : 02 Августа 2002, 21:11:44 »
Вообще-то, если на КАЖДЫЙ тег писать прег реплейс, то, вообще-то, проще будет сделать strtr.

Оффлайн Ardzhan

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 205
  • +0/-0
  • 0
    • Просмотр профиля
    • http://ardzhan.km.ru
Регулярные выражения: поиск парных тегов
« Ответ #13 : 02 Августа 2002, 23:27:21 »
Можно и str_replace... Но будет ли он проверять закрытие тега?

 

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