Не получается с рег. выражением.. :(

beba

Новичок
Не получается с рег. выражением.. :( [РЕШЕНО]

Здравствуйте..
помогите пож-та с регуляркой..
не силен в них :(

Мне нужно вместо все что внутри [prim][/prim] поместить в тултип и поставить ссылку на тултип ("Примичание").

Вот что получилось
PHP:
$text = preg_replace(
"/\[prim\](.*?)\[\/prim\]/is",
"<a href='#' onmouseover=\"".'return Tip(\''. "$1" .'\')"'.">Примечание</a>",
text);
Все бы хорошо, если бы не встречались символы переноса строки.. т.е. если между [prim] и [/prim] в тексте есть перенос строки, то тултип не сработает.. яваскрипт не скушает..

у меня есть для этого спец. функция:
PHP:
function tep_jsString($str='') {
    return preg_replace("/('|\"|\r?\n)/", '', $str);
}
если написать так:
PHP:
$text = preg_replace(
"/\[prim\](.*?)\[\/prim\]/is",
"<a href='#' onmouseover=\"".'return Tip(\''. tep_jsString("$1") .'\')"'.">Примечание</a>",
text);
все равно не получается..

Помогите пож-та выйти из ситуации.
Спасибо.
 

beba

Новичок
спасибо, вот только наверное не так поняли..

ключевое здесь, это то, что у меня не получается пропарсить в праметре замены.. т.е. не срабатывает для "$1" функция которая убирает знаки переноса строки..

если убрать знаки переноса строки для всей строки, то тултип срабатывает..
 

x-yuri

Новичок
по поводу кавычек, которые ты убираешь с помощью tep_jsString (http://phpfaq.ru/slashes#input)

по поводу строки, содержащей \r, \n - поздно это делать в javascript, в пхп нужно привести строку к нормальному виду

-~{}~ 02.01.09 20:52:

а, а я подумал, что tep_jsString - это js-функция, завтыкал как-то)) А как и почему она срабатывать должна?
 

beba

Новичок
я думал, что если в регулярном выражении в параметре для замены используется "$1", то это строка которая нашлась по шаблону.. и со строкой можно делать что нибудь, но как я понял я оказался не прав...

мне интересно.. а можно ли совместить два моих рег. выражения?.. т.е. чтобы отработало:
PHP:
$text = preg_replace( 
"/\[prim\](.*?)\[\/prim\]/is", 
"<a href='#' onmouseover=\"".'return Tip(\''. tep_jsString("$1") .'\')"'.">Примечание</a>", 
text);
а с совпадением сделать еще одно регулярное выражение, которое удаляет не нужные мне символы:
PHP:
preg_replace("/('|\"|\r?\n)/", '', $str)
 

beba

Новичок
> разберись, что получает preg_replace когда ты свою функцию (tep_jsString) используешь

тоже самое что и без использования этой функции
елси использователь эту функцию в таком виде, как у меня написано выше..

елси же функцию написать перед preg_replace, тогда порядок с тултипом, но перевод строки снимается со всего сообщения.. а мне нужно только чтобы снималось внутри [prim][/prim]
 

beba

Новичок
даже если использовать вместо tep_jsString, допустим str_replace("\n\r","","$1") то все равно никакого результата.. тоже самое...
если использовать допустим str_replace("Слово_которое_точно_есть_в_совпадении","","$1").. то тоже ничего не произойдет..
т.е. дело не в tep_jsString, а в том, что нужно подругому обратиться к совпадению найденому .. к - "$1"
 

x-yuri

Новичок
твой preg_replace аналогичен
PHP:
$replace = "<a href='#' onmouseover=\"".'return Tip(\''. tep_jsString("$1") .'\')"'.">Примечание</a>";
$text = preg_replace(  
"/\[prim\](.*?)\[\/prim\]/is",  
$replace,  
text);
может теперь понятно, почему твой вариант не работает?
 

beba

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

x-yuri

Новичок
я тебе 2 варианта (ссылки) предложил, как решить твою проблему - посмотри
 

beba

Новичок
спасибо..
да, я именно начал с них.. (вчера уже потом не заходил).. даже не думал, что еще отвеит кто..

начал с этих функций.. нашел модификатор /e.. в связке /ise не захотел работать, выдал ошибку - preg_replace Failed evaluating code.

по ошибке нашел - http://forum.woweb.ru/topic37224.html.
тут же увидел функцию preg_replace_callback (http://www.php.net/manual/ru/function.preg-replace-callback.php) которая и помогла мне..

Всем спасибо..
p.s. x-yuri в особенности... удачи и хорошего настроения ;)
 
Сверху