Есть регулярка, которая парсит бб-код размера текста, заданного в процентах. Как задать максимальный размер шрифта в 200%? Код (PHP): $bbcode = array( "'\[size=(.*?)\](.*?)\[/size\]'is" => "<span style='font-size: \\1%;'>\\2</span>" ); $text = preg_replace(array_keys($bbcode), array_values($bbcode), $text);
Код (Text): <?php function mf($txt){ $patt = '/^(1?\d{1,2}|200)$/'; $match = array(); preg_match($patt, $txt, $match); print $txt; print_r($match); } mf(1); mf(22); mf(123); mf(200); mf(1234); ?>
Нет, ты не понял вопроса. Как мне такую проверку добавить в приведённое в первом посте выражение? Вот у меня там первый (.*?) - надо чтобы он проверялся на число от 0 до 200.
Твой вариант пашет, ну, что - то это какие - то грабли. Это тоже пашет. Код (PHP): function size($size,$value) { return'<span style="font-size:'.(($size>200)?200:$size).'%;"> '.$size.' </span>'; } $text='[size=200]111111[/size]'; $text=preg_replace('#\[size=(\d+)](.+?)\[/size]#ies','size(\'\\1\',\'\\2\')',$text); echo $text;
Можно немного улучшить идейку, добавив возможность ведущих нулей, типа: Код (Text): ([0]*(?:[0,1]?\d{1,2}|200))
Просто он так выразился, не совсем корректно. И у него preg_replace. А не то, что вы preg_match ему тулите.
А теперь объясни, как (1?\d{1,2}|200) и ([0]*(?:[0,1]?\d{1,2}|200)) НЕрешает задачу "проверялся на число от 0 до 200". Т.е. объясни своё "Да ему не это нужно"...
И как будет правильно? (в твоей интерпретации) А попытать не пробовал Попытай, - потом расскажешь, каким боком тут preg_match Добавлено спустя 1 минуту 2 секунды: Не я решил - Крыс. Я только развил его идею по поводу ведущих нулей.
)) п.с. Да, я уже понял, что ты не хочешь признавать свою ошибку. Удачи. Добавлено спустя 4 минуты 57 секунд: Крыс уже написал что делать: подставить вместо (.*?) указанный кусок регулярки. Вот подставь и поиграйся с цифрами от 0 до 200 и больше и посмотри что получится. Потом расскажешь что.
Ты накурился!?) Смотри теперь: Код (PHP): function size($size,$value) { return'<span style="font-size:'.(($size>200)?200:$size).'%;"> '.$value.' </span>'; } Код (PHP): $text='[size=2000000000000]111111[/size]'; $text=preg_replace('#\[size=([0]*(?:[0,1]?\d{1,2}|200))](.+?)\[/size]#ies','size(\'\\1\',\'\\2\')',$text); echo $text; //[size=2000000000000]111111[/size] c 200 норм, без б, с Крысавым будет также Код (PHP): $text='[size=2000000000000]111111[/size]'; $text=preg_replace('#\[size=(\d+)](.+?)\[/size]#ies','size(\'\\1\',\'\\2\')',$text); echo $text; // 200 c size 200% Не советую пользоваться загруженными шаблонами, это " - " в производительности.
Это твоя персональная интерпретация озвученной ТС задачи. По моему мнению (и, думаю, Крыс-а) твоё решение неправильное. Правильным оно будет, если ТС соответственно изменит условие задачи.
Да, что ты только говоришь, и говоришь... Возьми и напиши, как будет правильно или только дар речи есть? Полностью напиши, мне как ты считаешь по данной задачи, сделать, код выложи. А потом уже поговорим.
(R) Крыс уже написал что делать: подставить вместо (.*?) указанный кусок регулярки. Хм... А вообще, спор бестолковый - у нас просто разная интерпретация/понимание задачи. Я понимаю "как есть", ты понимаешь "как должно быть" (по твоему мнению). На этом и закончим, ибо спор получается про интерпретацию. Бум считать - ничья, все правы. п.с. Кстати, модификатор "e" надо использовать очень осторожно, - дыра в безопасности.
присоединяюсь да, была мысль про это..но чет захотелось на это забить и да, прег_матч там был для иллюстрации работы регулярки.
Ололо.) Chushkin прав, мне нужно было именно это: "'\[size=(1?\d{1,2}|200)\](.*?)\[/size\]'is" => "<span style='font-size: \\1%;'>\\2</span>" Просто я не шарю в регулярках и не сразу понял куда чего подставлять. У меня теперь возник другой вопрос - вот например, юзер написал в сообщении: text. Соответственно, этот текст не пропарсится и при выводе останется в неизменённом виде. А реально ли изменить регулярку в первом посте так, чтобы если размер задан больше 200, то оно его насильно уменьшало до 200? В phpBB такая проверка делается при отправки текста пользователем, а я хочу сделать чтобы пользователь мог отправить всё что угодно, а проверка происходила уже при выводе текста.