регулярное выражение в preg_replace_callback

_Leonchik_

Новичок
регулярное выражение в preg_replace_callback

$str = preg_replace_callback($row_reg, "replace_tag", $text);
текстовая строка например выглядет так:
some text [kolor=red]LOG[/kolor] [urls=http://google.com]to_googl[/urls]end text.

(kolor - это есть color.)

и само reg выражение:
/(\[urls=http\]([^\[]*)\[\/urls\])|(\[kolor=([a-z]{3,6})\]([^\[]*)\[\/kolor\])/

проблема что на вхождение строк [urls=http://google.com]to_googl[/urls] и (\[urls=http\]([^\[]*)\[\/urls\]) нет захода в колбэк функцию. и это из того что оно не надодит его по контексту. что не так с urls?

-~{}~ 09.11.06 15:14:

причем даже на данном форуме этот код показал сылку, значит он рабочий?
 

sakon

П..и.н..ок
[urls=http://google.com]to_googl[/urls]
и
\[urls=http\]
ничего не замечаешь?
причем даже на данном форуме этот код показал сылку, значит он рабочий?
у тебя не работает логика, а не bb-коды.
 

_Leonchik_

Новичок
\[urls=http\:\/\/*\] - пробывал и так тоже, т.е. искать с экранированнымми символами : / / , и далее любой др. - но результат тотже.
 

sakon

П..и.н..ок
Афигеть.
PHP:
<?php
$txt =  'some text [kolor=red]LOG[/kolor] [urls=http://google.com]to_googl[/urls]end text.';
preg_match('/\[urls=http(.*?)\]([^\[]*)\[\/urls\]/',$txt,$match);
print_r($match);
?>
 

_Leonchik_

Новичок
я не силен в рег выражениях - вот щас и учусь используя статью на данном сайте и перечитывал ее не раз.

-~{}~ 09.11.06 15:43:

sakon что тебя так улыбнуло? Я тебя не допонял!

-~{}~ 09.11.06 16:36:

sakon - так в чем Вы офигели?

-~{}~ 09.11.06 16:59:

немогу понять конструкцию (.*?). что оно означает?
* - любой символ
? - один, и обязательный.
а точка перед ними что говорит?
 

sakon

П..и.н..ок
В том, что ищешь трудных путей.
Ты бы сначала сказал, что ты хочешь получить. В смысле, что твой код, всесте с preg_replace_callback, должен у тебя делать. Может быть, что нибудь другое тебе подсказали.

-~{}~ 09.11.06 17:06:

Автор оригинала: _Leonchik_
немогу понять конструкцию (.*?). что оно означает?
* - любой символ
? - один, и обязательный.
а точка перед ними что говорит?
Неправильно.
Читай http://ru.php.net/manual/ru/reference.pcre.pattern.syntax.php
 

_Leonchik_

Новичок
sakon сейчас при помощи твоей конструкции [urls=http(.*?)\]
я получаю ://google.com - но я не пойму ни как, как эта конструкция работает?, а понять надо т.к. надо-бы отсечь 2еточие и слэши.

-~{}~ 09.11.06 17:08:

читал и не раз. но не вижу где сабака зарыта!
 

sakon

П..и.н..ок
ссылка выше
Интересно ты читаешь.
". - соответствует любому символу, кроме перевода строки (по умолчанию)
* - квантификатор, означающий ноль или более вхождений
? - расширяет смысл метасимвола '(' , квантификатор, означающий ноль либо одно вхождение, квантификатор жадности "

Ты этого не нашел? Или все таки не читал?
 

_Leonchik_

Новичок
стоять, немного не там читал. щас секунду.

-~{}~ 09.11.06 17:18:

понимаем так:
( - Начало подмаски;
. - соответствует любому символу;
* - квантификатор, означающий ноль или более вхождений. т.е. символов может быть много, или не быть ваще;
? - теперь уже тут не понял его назначения

-~{}~ 09.11.06 17:21:

читал, но не там.
а там где читал - совсем не так понял.

Звездочка "*" означает сколько угодно литералов, а равно и их отсутствие! Что это значит? Это значит, что литералов может быть сколько угодно, но для совпадения при поиске не требуется ни один! И это нужно понимать и запомнить.
Знак вопроса "?" означает, что литералов может быть только один! Т.е. на данной позиции может стоять только один литерал, не больше и не меньше!
Рассмотрим подробнее понятие литерал, немного с другой стороны. Что из этих двух символов литерал, а что метасимвол? "j" "*"
Элементарно, Ватсон, "j" - литерал, "*" - метасимвол.

на данном сайте и вычитал. И щас меня будут пинать, что я все не так понял. может быть, но тогда зачем так запутывать?

-~{}~ 09.11.06 17:26:

sakon, Вы можете дословно прокоментировать данную строку?
Или лучше сначало я - после слова http может быть любой символ(за что отвечает точка), и их может быть много(*), но не жадничайте, в чЁм? в символах?
[urls=http(.*?)\]
 

sakon

П..и.н..ок
'/\[urls=http(.*?)\]([^\[]*)\[\/urls\]/'
Если разложить этот рег на слова :), то получится вроде такого
нужно найти фразу, которая начинается с [urls=http, после чего может идти любое кол-во любых символов, а затем закрывающая скобка ]. После этой конструкции должно идти любое кол-во любых символов, КРОМЕ [ (т.е. в этот карман попадет все, что стоит после ] и перед [). После этого должно идти [/urls].
Вот и все.
 

hermit_refined

Отшельник
_Leonchik_
Вам же дали ссылку на описание синтаксиса. Там всего 51.000 букв, всё написано, без утайки, неужели так сложно прочитать?..
 

_Leonchik_

Новичок
скажите плиз. куда надо вставить конструкцию для отрицания символов, '/\[urls=http(.*?)(^\:\/\/)\]([^\[]*)\[\/urls\]/'. - правильно? т.к. я получаю слово конечный результат ( ://google.com)
т.е. если я правильно понял то символы (слэши, двоеточие) надо экранировать, правильно ли это? (^\:\/\/)
и ставить надо перед. или после(.*?).

но не катит ни перед. ни после этой конструкции(.*?) :mad:
 

_Leonchik_

Новичок
решил так:
'/\[urls=http[?^:][?^\/][?^\/](.*?)\]([^\[]*)\[\/urls\]/'
Но почему не получается в одних кавычках? [*^:\/\/] - т.е. любой из символов
 

sakon

П..и.н..ок
снова ахринеть.
Чувак. Ну неужели так сложно научиться читать?
Какое отрицание? Ты даже не понимаешь о чем говоришь!!!
На
'/\[urls=http:\/\/(.*?)\](.*?)\[\/urls\]/'
И иди учись.

Вот чего не могу понять, так это - для чего здесь нужна preg_replace_callback
 
Сверху