[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Не получается составить регулярку, помогите
inpost
Есть строка:
$text = '[color=blue][-b][-i]Jake1219[/-i][/-b][/color=blue] Hello dear 5515 data yo-yo';
Необходимо 3+ цифр подряд выделить, при этом обязательным условием является то, что в фильтр не должны попадать цифры между тегами у ника, вот тут не должны выделяться: [color=blue][-b][-i]Jake1219[/-i][/-b][/color=blue] , а все, что дальше - должны. Вот моя попытка, но ничего не получилось:
$text = '[color=blue][-b][-i]Jake1219[/-i][/-b][/color=blue] Hello dear 5515 data yo-yo';
$text = preg_replace(
'#(?<!'.preg_quote('[color=blue][-b][-i]').').*?([0-9]{3,}).*?(?!'.preg_quote('[/-i][/-b][/color=blue]').')#ius',
'<strong><span style="color:red; font-size:16px">\\1</span></strong>',
$text
);
echo $text;


Ах да, ещё дополнительный вопрос, можно вывести значения всех кармашков по аналогии с массивом при помощи функции <pre> + print_r ?



Спустя 12 часов, 9 минут, 55 секунд (8.09.2011 - 16:36) Invis1ble написал(а):
Одной регуляркой не знаю как сделать, можно двумя (читай костыль)
$text = '[color=blue][-b][-i]Jake1219[/-i][/-b][/color=blue] Hello dear 5515 data yo-yo';
$text = preg_replace(
'#\pN{3,}#ius',
'<strong><span style="color:red; font-size:16px">$0</span></strong>',
$text
);

$text = preg_replace(
'#(' . preg_quote('[color=blue][-b][-i]') . '.*?)<strong><span style="color:red; font-size:16px">(\pN{3,})</span></strong>(.*?' . preg_quote('[/-i][/-b][/color=blue]') . ')#ius',
'$1$2$3',
$text
);
echo $text;

Спустя 13 минут, 50 секунд (8.09.2011 - 16:50) Winston написал(а):
А если так замутить ?
$text = '[color=blue][-b][-i]Jake 1219[/-i][/-b][/color=blue] Hello dear 5515 data yo-yo';
$text = preg_replace(
'#(?<!\])\b\pN{3,}\b(?!\[)#ius',
'<strong><span style="color:red; font-size:16px">$0</span></strong>',
$text
);
echo $text;

Спустя 4 минуты, 19 секунд (8.09.2011 - 16:54) Invis1ble написал(а):
вся проблема в том, что при ретроспективной проверке должна быть фиксированная длина регулярки, иначе ошибка при компиляции

Спустя 1 минута, 38 секунд (8.09.2011 - 16:56) Winston написал(а):
Цитата (inpost @ 8.09.2011 - 04:26)
Ах да, ещё дополнительный вопрос, можно вывести значения всех кармашков по аналогии с массивом при помощи функции <pre> + print_r ?

Можно так
Свернутый текст
function foo($arr)
{
print_r($arr);
return '<strong><span style="color:red; font-size:16px">'.$arr[0].'</span></strong>';
}
$text = '[color=blue][-b][-i]Jake 1219[/-i][/-b][/color=blue] Hello dear 5515 data yo-yo';
$text = preg_replace_callback(
'#(?<!\])\b(\pN{3,})\b(?!\[)#ius',
'foo',
$text
);
echo $text;


_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.