Сложный парсинг строки регулярными выражениями

Nerian

Новичок
Сложный парсинг строки регулярными выражениями

Всем привет!

Кто может подсказать как преобразовать строку вида "word word digital word real.real word",
с помощью регулятрного выражения в html строку с выделением отдельным цветом все слова, цифры,
и цифры с плавающей запятой?

Допустим чтобы word'у соответсвовал color=red, digital=blue, real=green.
И в итоге из указанной выше строки получилось бы следующее:

<font color='red'>word word</font> <font color='blue'>digital</font> <font color='red'>word</font> <font color='green'>real.real</font> <font color='red'>word</font>?

Вся сложность обстоит в том что после первой замены всех допустим цифр на определённый цвет добавяться теги, и потом теги так же будут обработаны регулярным выражением как слова. Как быть?
 

sakon

П..и.н..ок
Первое, что приходит в голову, это
1. сделать из строки массив
2. Обработать каждую ячейку массива
3. Собрать массив в строку.
 

Profic

just Profic (PHP5 BetaTeam)
[m]preg_split[/m]() c PREG_DELIM_CAPTURE (или как оно там) по всем словам + цикл + implode
(это чтобы правильно :))

а чтобы лишь бы работало
[m]preg_replace[/m]() с модификатором e по своим словам + ф-ция, которая "красит"
 

tashkentchi

Новичок
А лучше выдели цветом все числа, а потом весь текст возьми в теги <font color='red'>...</font>. Получится:

<font color='red'>word word <font color='blue'>digital</font> word <font color='green'>real.real</font> word</font>
 

kos

Новичок
Елементарно:
PHP:
$color=array(
   "<font color='red'>word</font>",
   "<font color='blue'>digital</font>",
   "<font color='green'>real</font>"
);
$word=array("/\bword\b/","/\bdigital\b/","/\breal\b/");
$res=preg_replace($word,$color,$input);
 

SelenIT

IT-лунатик :)
kos
Это элементарно в случае такого вырожденного примера :)
Ближе к реальности такие шаблоны для поиска и замены соответственно:
PHP:
$word=array(
   "/\b[a-zа-яё\-_]+\b/i",
   "/\b(?<!\.)\d+(?!\.\d)\b/",
   "/\b\d*\.\d+\b/"
);
$color=array(
   "<font color='red'>\\0</font>",
   "<font color='blue'>\\0</font>",
   "<font color='green'>\\0</font>"
);
но и этот вариант нуждается в существенной доработке напильником.
 

Nerian

Новичок
Всем спасибо. Я тоже вначале хотел разбивать строку а потом красить. Но потом подумал а может это можно сделать каким нибудь одним хитрым регулярным выражением. ;) Выходит что нет. Всем спасибо за советы/ответы.
 
Сверху