X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

2 страниц V   1 2 >
Открыть тему
Тема закрыта
> Preg_replace
panika
panika
Topic Starter сообщение 19.12.2010, 16:52; Ответить: panika
Сообщение #1


HTML
[level>0]Вы авторизованы[/level]


PHP
[php]$source = preg_replace( "#\[level([^\[\]]*?)\](.*?)\[\/level\]#ie", "\$this->level_blocks('\\2','\\1')", $source );[/php]

preg_replace не находит блок [level][/level], могу сказать точно если убрать \[\/level\] - ошибка вероятнее всего кроется в этой части кода.
Вчера весь день над этим мучал свой мозг. :)

Кто хорошо разбирается в регулярных выражениях помогите.
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
sc2r2bey
sc2r2bey
сообщение 19.12.2010, 17:15; Ответить: sc2r2bey
Сообщение #2


это что за изврат? и откуда берется [level>0]Вы авторизованы[/level]? и как отображется и где храниться?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
panika
panika
Topic Starter сообщение 19.12.2010, 17:27; Ответить: panika
Сообщение #3


Вопросом на вопрос конечно не очень хорошо, но так как я сам так иногда делаю отвечу:

Это обрабатываются шаблоны, раньше у меня было [admin][/admin][moder][/moder][auth][/auth][no-auth][/no-auth],
но я подумал вот это и есть извращение, а то что я решил сделать, это ни что иное как облегчение кода и нервов.

[level>0]Вы авторизованы[/level]
[level<1>2]Гость, Администратор[/level] или [level=0,3]Гость, Администратор[/level]

Вообще мне бы хотелось не слушать что это извращение а заставить это регулярное выражение работать как надо.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
sc2r2bey
sc2r2bey
сообщение 19.12.2010, 22:06; Ответить: sc2r2bey
Сообщение #4


что это за шаблон такой откуда он берется и где выводится?


--------------------
Заметки о разработке и не только
программирую web и для we
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
panika
panika
Topic Starter сообщение 19.12.2010, 22:18; Ответить: panika
Сообщение #5


точно могу сказать что выше приведенная строка HTML находиться в переменной $source
и нужно чтобы функция приняла level_blocks('Вы авторизованы','>0')

я вроде достаточно сказал, чтобы мне смогли помочь
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
sc2r2bey
sc2r2bey
сообщение 19.12.2010, 22:35; Ответить: sc2r2bey
Сообщение #6


а причем здесь html?


--------------------
Заметки о разработке и не только
программирую web и для we
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
panika
panika
Topic Starter сообщение 19.12.2010, 23:12; Ответить: panika
Сообщение #7


а зачем вы спросили а зачем здесь html?

задавайте все вопросы в одно сообщение, пожалуйста
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
sc2r2bey
sc2r2bey
сообщение 20.12.2010, 0:04; Ответить: sc2r2bey
Сообщение #8


я задал вам их в первом посте, но вы выбрали непонимать, что творите


--------------------
Заметки о разработке и не только
программирую web и для we
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
panika
panika
Topic Starter сообщение 20.12.2010, 18:22; Ответить: panika
Сообщение #9


Все сделал, правда потратил на это много нервов.

[php]$source = "[level>6]2[level<2]Вы авторизованы[/level]232134[/level]";
$level = 8;

function level_blocks($source, $more=''){

$regexp = "#\\[level([^\]\[]*?)\\]((?:[^[]|(?R))+)\\[/level\\]#";

if(is_array($source)){
$more = $source[1];
$source = $source[2];

preg_match("/<([0-9]+)/i", $more, $under);
$AOpenForU = isset( $under[1] )? intval( $under[1] ) : false;

preg_match("/>([0-9]+)/i", $more, $larger);
$AOpenForL = isset( $larger[1] )? intval( $larger[1] ) : false;
if( ( !$AOpenForL || $AOpenForL > $level ) && ( !$AOpenForU || $AOpenForU < $level ) ){
preg_match($regexp, $source, $output);
if( count( $output ) > 0 ) return preg_replace_callback( $regexp, "level_blocks", $source );
return $source;
}else return '';

return false;
}else{

return preg_replace_callback( $regexp, "level_blocks", $source );

}

}

$source = level_blocks( $source );

print $source;[/php]
2232134
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Гость_0_* Гость_0_*
сообщение 20.12.2010, 18:58; Ответить: Гость_0_*
Сообщение #10


marker, казалось бы несколько трочек кода, а на них потрачено несколько дней :)
Всё приходит с опытом, а нервничать не нужно, это не поможет. Особенно с регулярными выражениями, там нужны спокойствие и внимательность.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
2 страниц V   1 2 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


 



RSS Текстовая версия Сейчас: 29.3.2024, 11:16
Дизайн