Перейти к содержимому

Сервис обмена электронных валют

Партнерская программа Kredov

Preg_replace

#1 marker

marker
  • Пользователь
  • 52 сообщений
  • Репутация: 0
0

Отправлено 19 Декабрь 2010 - 15:52

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


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


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

Кто хорошо разбирается в регулярных выражениях помогите.

 

 

  • 0

#2 surfer

surfer
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71

Отправлено 19 Декабрь 2010 - 16:15

это что за изврат? и откуда берется [level>0]Вы авторизованы[/level]? и как отображется и где храниться?
  • 0

#3 marker

marker
    Topic Starter
  • Пользователь
  • 52 сообщений
  • Репутация: 0

Отправлено 19 Декабрь 2010 - 16:27

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

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

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

Вообще мне бы хотелось не слушать что это извращение а заставить это регулярное выражение работать как надо.
  • 0

#4 surfer

surfer
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71

Отправлено 19 Декабрь 2010 - 21:06

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

#5 marker

marker
    Topic Starter
  • Пользователь
  • 52 сообщений
  • Репутация: 0

Отправлено 19 Декабрь 2010 - 21:18

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

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

#6 surfer

surfer
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71

Отправлено 19 Декабрь 2010 - 21:35

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

#7 marker

marker
    Topic Starter
  • Пользователь
  • 52 сообщений
  • Репутация: 0

Отправлено 19 Декабрь 2010 - 22:12

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

задавайте все вопросы в одно сообщение, пожалуйста
  • 0

#8 surfer

surfer
  • Заблокированные
  • 1 956 сообщений
  • Репутация: 71

Отправлено 19 Декабрь 2010 - 23:04

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

#9 marker

marker
    Topic Starter
  • Пользователь
  • 52 сообщений
  • Репутация: 0

Отправлено 20 Декабрь 2010 - 17:22

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

$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;

2232134

  • 0

#10 admin

admin
  • Пользователь PRO
  • 5 272 сообщений
  • Репутация: 54

Отправлено 20 Декабрь 2010 - 17:58

marker, казалось бы несколько трочек кода, а на них потрачено несколько дней :)
Всё приходит с опытом, а нервничать не нужно, это не поможет. Особенно с регулярными выражениями, там нужны спокойствие и внимательность.
  • 0

Сколько лет прошло, а ссылки всё ещё лучше покупать тут



robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru