Что не так с регуляркой?

Тема в разделе "Регулярные выражения", создана пользователем pozitiv, 21 окт 2010.

Статус темы:
Закрыта.
Модераторы: xpert13
  1. pozitiv

    pozitiv Постоялец

    Регистр.:
    25 ноя 2007
    Сообщения:
    58
    Симпатии:
    5
    Есть регулярное выражение, которое парсит ббкод [_img][_/img]
    PHP:
    $a "#\[img\]((http|ftp|https|ftps)://)(.*?)(\.(jpg|jpeg|gif|png|JPG|JPEG|GIF|PNG))\[/img\]#sie";
    $b "'<a href=\'\\1'.str_replace(array('?','&','&','='),'','\\3').'\\4\' class=\'highslide\' onclick=\'return hs.expand(this)\' />
    <img src=\'\\1'.str_replace(array('?','&','&','='),'','\\3').'\\4\' alt=\'\\3\\4\' style=\'border:0px\' class=\'forum-img\' />
    </a>'"
    ;
    $text preg_replace($a,$b,$text);
    На выходе я ожидаю получить <_a href=бла бла бла><_img src=бла бла бла><_/a>, но вместо этого ссылка съедается и я получаю только остатки ><_img src=бла бла бла><_/a> - как видите, нехватает начала тега. Это есл смотреть исходник страницы, на самой же странице отображается картинка с знаком > перед картинкой...
    Путем не хитрых манипуляций я выяснил что проблема onclick=\'return hs.expand(this)\', если это действие убрать, то ссылка нормально отображается, но уже невыполняет нужных функций
    В чем может быть проблема?
     
  2. propovednik

    propovednik Постоялец

    Регистр.:
    16 май 2008
    Сообщения:
    104
    Симпатии:
    21
    Может из-за того что Вы не экранировали точку? Попробуйте с onclick=\'return hs expand(this)\' - если заработает, то дело в этом.
     
  3. pozitiv

    pozitiv Постоялец

    Регистр.:
    25 ноя 2007
    Сообщения:
    58
    Симпатии:
    5
    Экранировал точку и скобки - все-равно неработает(
     
  4. diavolic

    diavolic

    Регистр.:
    17 мар 2010
    Сообщения:
    522
    Симпатии:
    102
    может так?

    PHP:
    $a "/\[img\]([^\[]+)/i";
    $b "'<a href='\\1' class='highslide' onclick='return hs.expand(this)'/><img src='\\1' style='border:0px' class='forum-img' /></a>'"
    $text preg_replace($a,$b,$text);  
     
  5. pozitiv

    pozitiv Постоялец

    Регистр.:
    25 ноя 2007
    Сообщения:
    58
    Симпатии:
    5
    Тоже нет, также обрезает ссылку, и более того добавляет [_/img] после картинки
     
  6. frantz1488

    frantz1488

    Регистр.:
    21 мар 2010
    Сообщения:
    162
    Симпатии:
    43
    Неуверен, но попробуйте заэкранировать слэши

    Добавлено через 2 минуты
    А еще лучше приведите исходный код который парсите
     
  7. pozitiv

    pozitiv Постоялец

    Регистр.:
    25 ноя 2007
    Сообщения:
    58
    Симпатии:
    5
    / - этот слеш? непомогает((

    Парсится обычный ббкод [img_]http://www.nulled.ws/nulled_v4/editor/insertimage.gif[/img_]
     
  8. frantz1488

    frantz1488

    Регистр.:
    21 мар 2010
    Сообщения:
    162
    Симпатии:
    43
    Может я чего недопонимаю, но почему бы не сделать так:
    PHP:
    <?php
    $text 
    ="[img]http://www.nulled.ws/nulled_v4/editor/insertimage.gif[/img]";
    $text str_replace("[img]"""$text); 
    $text str_replace("[/img]"""$text); 
    echo 
    "<a href='$text' class='highslide' onclick='return hs.expand(this)'/><img src='$text' style='border:0px' class='forum-img' /></a>";
    ?>
     
  9. pozitiv

    pozitiv Постоялец

    Регистр.:
    25 ноя 2007
    Сообщения:
    58
    Симпатии:
    5
    Так темболее неработает
     
  10. frantz1488

    frantz1488

    Регистр.:
    21 мар 2010
    Сообщения:
    162
    Симпатии:
    43
    Странно у меня с этим кодом все работает, возможно слова: "return" или "expand(this)" скрипт с чем-то путает или во всем виноват закрывающий слеш в открывающем теге "а": <a href....bla bla bla /> </a>
    вобщем попробуй еще так:
    PHP:
    $a "#\[img\]((http|ftp|https|ftps)://)(.*?)(\.(jpg|jpeg|gif|png|JPG|JPEG|GIF|PNG))\[/img\]#sie"
    $zam 'return hs.expand(this)';
    $b "'<a href=\'\\1'.str_replace(array('?','&','&','='),'','\\3').'\\4\' class=\'highslide\' onclick=\'$zam\' > 
    <img src=\'\\1'.str_replace(array('?','&','&','='),'','\\3').'\\4\' alt=\'\\3\\4\' style=\'border:0px\' class=\'forum-img\' /> 
    </a>'"

    $text preg_replace($a,$b,$text); 
     
Статус темы:
Закрыта.