Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Перевод BBcode url в html-вскую рабочую ссылку
 
 автор: parczynski   (20.07.2007 в 18:17)   письмо автору
 
 

Здрасте. Пытаюсь сделать замену BBcode гиперссылки на гет гиперссылки. дело в том что код может быть таким url=www.site.ru]текст[/url], а может быть таким url]www.site.ru[/url]. Для замены пользуюст такими алгоритмами:
Для url=www.site.ru]текст[/url]:

while (eregi("(.+)?(\[url=)(http://)?([^[:space:]]+)([[:alnum:]\.,-_?/&=])(\])(.+)(\[/url\])(.+)?", $text)) {
    $pattern="(.+)?(\[url=)(http://)?([^[:space:]]+)([[:alnum:]\.,-_?/&=])(\])(.+)(\[/url\])(.+)?";
    $replace="\\1<a href=\"http://\\4\\5\">\\7</a>\\9";
    $text=eregi_replace($pattern, $replace, $text);
}

Для url]www.site.ru[/url]

while (eregi("(.+)?(\[url\])(http://)?([^[:space:]]+)([[:alnum:]\.,-_?/&=])(\[/url\])(.+)?", $text)) {
    $pattern="(.+)?(\[url\])(http://)?([^[:space:]]+)([[:alnum:]\.,-_?/&=])(\[/url\])(.+)?";
    $replace="\\1<a href=\"http://\\4\\5\">\\4\\5</a>\\7";
    $text=eregi_replace($pattern, $replace, $text);
}

Так вот все работает, за исключением тех случаев, когда в сообщение есть сначала первый вид ссылки а потом второй:
url=www.site.ru]текст[/url] еще некоторый текст url]www.site.ru[/url].
Дело в том что определяется не 2 контейнера, а один первый открывающий и 2-й закрывающий а между нами содержимое

 текст[/url] еще некоторый текст url]www.site.ru

Как это починить????

   
 
 автор: SHAman   (20.07.2007 в 18:25)   письмо автору
 
   для: parczynski   (20.07.2007 в 18:17)
 

1) Забудьте про ereg и подобную чушь! Эти регулярки разработаны производителями пхп и работают ОЧЕНЬ МЕДЛЕННО! Используйте Perl-library, то есть, аналоги preg.

2) достаточно одной регулярки для замены надписи типа [url=site]текст[/url]

что-то типа:
preg_replace("/\[url=([a-z0-9./:]+)\](.*?)\[url\]/","<a href=$1>$2</a>");

3) Возможно, я неправильно понял условие. Дайте примеры строк, которые могут быть на входе и что нужно получить на выходе.

   
 
 автор: parczynski   (20.07.2007 в 18:42)   письмо автору
 
   для: parczynski   (20.07.2007 в 18:17)
 

Пример такой:
ввожу строку

[url=www.site.ru]текст[/url] Здесь некоторый текст [url]www.site.ru[/url]

на выходе должно быть

<a href=www.site.ru>текст</a>Здесь некоторый текст<a href=www.site.ru>www.site.ru</a>

Вместо этого я получаю:

<a href="http://www.site.ru]текст[/url"> Здесь некоторый текст [url]www.site.ru</a>

   
 
 автор: SHAman   (20.07.2007 в 18:45)   письмо автору
 
   для: parczynski   (20.07.2007 в 18:42)
 

Тогда посмотри на мой предыдущий пост.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования